Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

Grundlegendes Lernen und Erfahrungsaustausch zu MySQL-Transaktionen

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:
  • Grundkenntnisse zu MySQL – Lernhinweise
  • Grundlegendes Lernprogramm zu Tabellenunterabfragen und korrelierten Unterabfragen in MySQL
  • Grundlegendes Lernprogramm zu Triggern in MySQL
  • Erste Schritte mit MySQL-Grundlagen Lernen Sie MySQL-Befehle einfach
  • Eine Zusammenfassung nach dem Erlernen von MySQL (Grundlagen)
  • Lernen Sie schnell die MySQL-Grundlagen

<<:  Detaillierte Erläuterung der geplanten Aufgaben für normale Benutzer unter Linux

>>:  Vue implementiert Bildverifizierungscode beim Anmelden

Artikel empfehlen

Kenntnisse über die MySQL Memory-Speicher-Engine

Wissenspunkte zur Speicher-Storage-Engine Die Spe...

Tutorial zur Installation von MySQL8 auf Centos7

Neue Funktionen in MySQL 8: Meine persönliche Mei...

Detaillierter Installationsprozess von MySQL5.6.40 unter CentOS7 64

MySQL5.6.40-Installationsprozess unter CentOS7 64...

So zeigen Sie den Prozentsatz und die ersten paar Prozent in MySQL an

Inhaltsverzeichnis Erfordern Implementierungscode...

mysql 8.0.19 winx64.zip Installations-Tutorial

Dieser Artikel zeichnet das Installationstutorial...

Beispielcode einer Vue-Anwendung basierend auf der Axios-Anforderungskapselung

Inhaltsverzeichnis Was ist Axios? Axios-Anforderu...

js-Entwicklungs-Plugin zum Erzielen eines Tab-Effekts

In diesem Artikelbeispiel wird der spezifische Co...