Eine Transaktion ist eine logische Gruppe von Operationen. Jede Einheit, die diese Gruppe von Operationen bildet, muss entweder erfolgreich sein oder fehlschlagen. Diese Funktion wird als Transaktion bezeichnet. Hier sind einige Tipps zum Erlernen von MySQL-Transaktionen: Merkmale der Transaktionen 1. Atomarität: Atomarität bedeutet, dass eine Transaktion eine unteilbare Arbeitseinheit ist und die Vorgänge in einer Transaktion entweder alle oder keiner von ihnen auftreten. 2. Konsistenz: Bei einer Transaktion muss die Integrität der Daten vor und nach der Transaktion konsistent bleiben. Denken Sie zum Beispiel an Banküberweisungen oder den Kauf von Zugfahrkarten. 3. Isolation: Mehrere Transaktionen. Transaktionsisolierung bedeutet, dass beim gleichzeitigen Zugriff mehrerer Benutzer auf die Datenbank die Transaktionen eines Benutzers nicht durch die Transaktionen anderer Benutzer gestört werden können und die Daten zwischen mehreren gleichzeitigen Transaktionen voneinander isoliert sein müssen. 4. Dauerhaftigkeit: Dauerhaftigkeit bedeutet, dass die an den Daten in der Datenbank vorgenommenen Änderungen einer Transaktion dauerhaft sind und selbst bei einem Datenbankausfall in keiner Weise beeinträchtigt werden sollten. Über diese Konzepte zu schreiben ist etwas verwirrend! Gehen Sie einfach drum herum! Wie auch immer, es ist nicht meine Regel, es ist offiziell und die Erklärung habe ich mir ausgedacht! ! ! Probleme beim gleichzeitigen Zugriff auf Transaktionen Wenn wir das Isolationsproblem nicht berücksichtigen, gibt es drei Arten von gleichzeitigen Zugriffsproblemen bei Transaktionen. 1. Dirty Read: Beim Lesen von Daten in einer Transaktion werden nicht festgeschriebene Daten aus einer anderen Transaktion gelesen. Beispiel: Konto A überweist 1 Yuan auf Konto B, aber A führt die Transaktion nicht durch. Konto B sieht dies durch Dirty Read. Zu diesem Zeitpunkt wird B denken, dass A das Geld überwiesen hat, aber zu diesem Zeitpunkt macht Konto A die Transaktion rückgängig. Tatsächlich wurde das Geld nicht an B überwiesen, sondern B selbst dachte, dass A es überwiesen hätte. Das ist etwas verwirrend. Ich schätze, es liegt an meiner Beschreibung! Schauen Sie sich den Code an: update account set money=money+1 where name='B'; --A benachrichtigt jetzt B Konto aktualisieren, Geld festlegen=Geld -1 wobei Name='A'; 2. Nicht wiederholbares Lesen: Bei einer Transaktion ist der zweimal gelesene Dateninhalt inkonsistent. Dies liegt daran, dass zwischen den Abfragen ein Zeitintervall liegt und die Daten von einer anderen Transaktion geändert und übermittelt wurden, was zu Problemen führt. 3. Phantomlesen/virtuelles Lesen: Bei einer Transaktion ist die Menge der zweimal gelesenen Daten inkonsistent. Transaktionsisolationsebene Das Obige führt zu drei Arten von Transaktionsparallelitätsproblemen! Lassen Sie uns nun die von der Datenbank bereitgestellte Lösung vorstellen! 1. Nicht festgeschriebenes Lesen: Nicht festgeschriebene Daten lesen: Dies ist die niedrigste Ebene, aber definitiv die effizienteste, kann jedoch keine Probleme lösen. 2. Festgeschriebenes Lesen: Festgeschriebene Daten lesen: kann Dirty Read lösen. 3. Wiederholbares Lesen: Wiederholbares Lesen: kann Dirty Read und nicht wiederholbares Lesen lösen. 4.serializable: Serialisierung: Kann Dirty Reads, nicht wiederholbare Reads und virtuelle Reads lösen. Sie hat die schlechteste Effizienz und entspricht dem Sperren der Tabelle. Sie wird in der Entwicklung im Allgemeinen nicht verwendet. Die oben genannte „2“ ist die Standardeinstellung für die Oracle-Datenbank und „3“ die Standardeinstellung für die MySQL-Datenbank. Als Nächstes werde ich mich auf die Erläuterung der Demonstration der MySQL-Datenbank auf den oben genannten verschiedenen Transaktionsisolationsebenen konzentrieren: Zunächst führen wir zwei Grammatiken ein: 1. Zeigen Sie die Standardisolationsstufe der MySQL-Datenbank an: Wählen Sie @@tx_isolation Wie in der Abbildung gezeigt: 2. Legen Sie die Isolationsstufe von MySQL fest: Legen Sie die Isolationsstufe für Sitzungstransaktionen fest Wie in der Abbildung gezeigt: Demonstration der Transaktionsisolationsebene Hinweis: Wenn Sie sich selbst simulieren möchten, müssen Sie zwei MySQL-Clients öffnen, d. h. zwei Benutzer simulieren! 1. Lesen Sie nicht festgeschrieben Wie in der Abbildung gezeigt: Ich habe die Transaktionsisolationsebene der Datenbank geändert, um nicht festgeschriebene Daten über die Syntax zu lesen. Zuerst habe ich eine Kontentabelle. Wie in der Abbildung gezeigt: Fenster 1 Fenster 2 Der ursprüngliche Geldbetrag in der Datenbanktabelle beträgt 5000. Als ich die Transaktion startete, wurden 1000 zu Zhangsans Konto hinzugefügt und 1000 von Lisis Konto abgezogen. Meine Transaktion wurde jedoch noch nicht bestätigt. Als ich die Datenbanktabelle jedoch erneut abfragte, hatten sich die Daten geändert. Dies ist ein Dirty Read und ein nicht wiederholbarer Read! Ich will nicht verhehlen, dass es auch Phantomlesen/virtuelles Lesen gibt! 2.gelesen verpflichtet Wie in der Abbildung gezeigt: Ich habe die Datenbanktransaktionsisolation auf „Committted“ geändert. Noch die Tabelle oben: Wie in der Abbildung gezeigt: Fenster 1 Fenster 2 Das Geld des Kontos von zhangsan in der Datenbanktabelle und das Geld des Kontos lisi haben sich geändert. Ich habe die Transaktion nicht bestätigt. Als ich die Abfrage mit der Transaktion in einem anderen geöffneten Fenster durchführte, trat kein Dirty Read auf. Als ich die Transaktion jedoch bestätigte und die Abfrage unter der Transaktion in einem anderen Fenster erneut durchführte, trat ein nicht wiederholbarer Read auf. Dadurch können Dirty Reads vermieden werden, aber während der Abfrage traten nicht wiederholbare Reads und Phantom Reads/virtuelle Reads auf! 3. Wiederholbares Lesen Wie in der Abbildung gezeigt: Ich habe die Datenbanktransaktionsisolation auf „Committted“ geändert. Noch die Tabelle oben: Wie in der Abbildung gezeigt: Fenster 1 Fenster 2 Ich habe Transaktionen in beiden Fenstern geöffnet. Nachdem Fenster eins Datenoperationen durchgeführt und die Transaktion bestätigt hatte, habe ich die Daten in Fenster zwei abgefragt, während die Transaktion geöffnet war. Ich habe in Fenster eins keine Datensätze von Datenoperationen gefunden. Dadurch wurden Dirty Reads und nicht wiederholbare Lesevorgänge vermieden. Manche behaupten, dass dadurch auch falsches Lesen bzw. Phantomlesen vermieden wird, aber das ist nicht der Fall. Siehe Bild: Als ich das Lisi-Konto bediente, wurden nur die Daten geändert. Als ich jedoch das Wangwu-Konto änderte, wurden die Daten des Wangwu-Kontos angezeigt, als ich es abfragte. Tatsächlich konnten die Daten des Wangwu-Kontos jedoch vor der Bedienung nicht abgefragt werden. Das ist Phantomlesen/virtuelles Lesen! Wenn Sie Phantom-Lesevorgänge nicht verstehen, können Sie InnoDB ausprobieren. 4.Serialisierbar Ich werde es nicht demonstrieren. Es ist für die Entwicklung nicht zu empfehlen und ist langsam, aber alle Probleme können vermieden werden! ! Um zusammenzufassen Leistung der Transaktionsisolationsebene: Lesen nicht festgeschrieben > Lesen festgeschrieben > wiederholbares Lesen > serialisierbar Sicherheit der Transaktionsisolationsebenen: Lesen nicht festgeschrieben < Lesen festgeschrieben < wiederholbares Lesen < serialisierbar MySQL-Transaktionssteuerung: Transaktion starten: Transaktion starten; Senden: Commit; Zurückrollen: Zurückrollen; Das könnte Sie auch interessieren:
|
<<: Detaillierte Erläuterung der geplanten Aufgaben für normale Benutzer unter Linux
>>: Vue implementiert Bildverifizierungscode beim Anmelden
Wissenspunkte zur Speicher-Storage-Engine Die Spe...
Die SQL-Optimierung von Datenbanken ist ein häufi...
Zeichenfolgenfunktionen Überprüfen Sie den ASCII-...
Neue Funktionen in MySQL 8: Meine persönliche Mei...
Vor dem Verstecken: Nach dem Verstecken: CSS: Code...
MySQL5.6.40-Installationsprozess unter CentOS7 64...
Vor Kurzem hat das Unternehmen damit begonnen, al...
Inhaltsverzeichnis Erfordern Implementierungscode...
Dieser Artikel zeichnet das Installationstutorial...
Viele Menschen leben heute im Internet und die Suc...
Inhaltsverzeichnis Was ist Axios? Axios-Anforderu...
Um uns auf dem Server schnell bei der Datenbank a...
In diesem Artikelbeispiel wird der spezifische Co...
Was ist ein Spiegel? Ein Bild kann als Dateisyste...
Einige Optimierungsregeln für Browser-Webseiten S...