Analyse der MySQL-Transaktionsmerkmale und Ebenenprinzipien

Analyse der MySQL-Transaktionsmerkmale und Ebenenprinzipien

1. Was ist eine Transaktion?

Eine Datenbanktransaktion (abgekürzt: Transaktion) ist eine logische Einheit im Ausführungsprozess eines Datenbankverwaltungssystems, die aus einer endlichen Folge von Datenbankoperationen besteht.

2. Vier Hauptmerkmale von Transaktionen

Dies sind Atomizität, Konsistenz, Isolation und Persistenz.

1. Atomarität

Atomarität bedeutet, dass alle in einer Transaktion enthaltenen Vorgänge entweder erfolgreich sein oder fehlschlagen und dann zurückgesetzt werden müssen. Wenn der Transaktionsvorgang erfolgreich ist, muss er daher vollständig auf die Datenbank angewendet werden. Wenn der Vorgang fehlschlägt, kann er keine Auswirkungen auf die Datenbank haben.

2. Konsistenz

Konsistenz bedeutet, dass eine Transaktion die Datenbank von einem konsistenten Zustand in einen anderen konsistenten Zustand überführen muss, das heißt, eine Transaktion muss vor und nach der Ausführung in einem konsistenten Zustand sein. Angenommen, der Gesamtbetrag von Benutzer A und Benutzer B beträgt 1000. Unabhängig davon, wie und wie oft A und B Geld überweisen, sollte der Gesamtbetrag der beiden Benutzer nach Abschluss der Transaktion immer noch 1000 betragen. Dies ist die Konsistenz der Transaktion.

3. Isolierung

Isolation bedeutet, dass, wenn mehrere Benutzer gleichzeitig auf die Datenbank zugreifen, z. B. wenn sie gleichzeitig dieselbe Tabelle bedienen, die von der Datenbank für jeden Benutzer geöffnete Transaktion nicht durch die Vorgänge anderer Transaktionen gestört werden kann und mehrere gleichzeitige Transaktionen voneinander isoliert werden müssen. In Bezug auf die Transaktionsisolierung bietet die Datenbank mehrere Isolationsebenen, die später vorgestellt werden.

4. Haltbarkeit

Persistenz bedeutet, dass nach dem Festschreiben einer Transaktion die Änderungen an den Daten in der Datenbank dauerhaft sind und der Festschreibvorgang der Transaktion auch bei einem Ausfall des Datenbanksystems nicht verloren geht. Wenn wir beispielsweise JDBC zum Bedienen der Datenbank verwenden, wird der Benutzer nach dem Senden der Transaktionsmethode aufgefordert, den Transaktionsvorgang abzuschließen. Wenn unser Programm ausgeführt wird und wir die Eingabeaufforderung sehen, können wir feststellen, dass die Transaktion korrekt gesendet wurde. Selbst wenn zu diesem Zeitpunkt ein Problem mit der Datenbank vorliegt, müssen wir unsere Transaktion vollständig ausführen. Andernfalls tritt ein schwerwiegender Fehler auf, bei dem zwar die Meldung angezeigt wird, dass die Transaktion abgeschlossen ist, die Datenbank die Transaktion aufgrund eines Fehlers jedoch nicht ausführen kann. Dies ist nicht zulässig.

3. MySQL-Isolationsebene

LESEN SIE UNVERBINDLICH

Auf der Ebene der nicht festgeschriebenen Lesetransaktionen kann eine Transaktion Daten lesen, die nicht von einer anderen Transaktion festgeschrieben wurden.
Beispielsweise aktualisiert Transaktion A ein Feld, wird aber nicht festgeschrieben. Beim Lesen des Namensfelds des Datensatzes mit der ID 1000 in Transaktion B ist der Wert von Name „aaa“, aber Transaktion A wird nicht festgeschrieben, sodass Name = „aaa“ möglicherweise zurückgesetzt wird. In diesem Fall liest Transaktion A die Daten einer nicht festgeschriebenen Transaktion, was als „Dirty Read“ bezeichnet wird.

LESEN SIE ENGAGIERT

Auf der Ebene der festgeschriebenen Lesetransaktionen kann eine Transaktion Daten lesen, nachdem eine andere Transaktion festgeschrieben wurde.

Beispielsweise liest Transaktion A das Namensfeld des Datensatzes mit der ID 1000 als aaa, und dann aktualisiert Transaktion B den Namenswert dieses Datensatzes und schreibt ihn fest. Wenn Transaktion A den Namen erneut liest, lautet der Wert des Namens bbb. Wenn in einer Transaktion ein Feld daher mehrmals gelesen wird, können die erhaltenen Werte unterschiedlich sein.

Die doppelt gelesenen Werte vor und nach Transaktion A sind inkonsistent!

WIEDERHOLBARES LESEN

Auf der Ebene der wiederholbaren Lesetransaktionen ändern sich die Felder, die eine Transaktion wiederholt liest, nicht.

Beispielsweise liest Transaktion A den Datensatz mit der ID 1000 und der Name-Wert ist aaa, dann ändert Transaktion B den Namen in bbb und Transaktion B wird festgeschrieben. Wenn Transaktion A den Namen erneut liest, wird sie nicht bbb lesen. Daher ist Transaktion A gleichbedeutend damit, sich in einer unabhängigen Welt zu befinden, und jegliche Änderungen von außen wirken sich nicht auf Transaktion A aus.

Wiederholbare Lesevorgänge können jedoch zu Phantom-Lesevorgängen führen. Was sind Phantom-Lesevorgänge? Zum Beispiel:
Transaktion A fragt eine Tabelle ab. In der Tabelle gibt es nur einen Datensatz mit der ID 1. Transaktion B fügt jedoch einen Datensatz mit der ID 2 ein. Transaktion A weiß nicht, dass Daten mit der ID 2 vorhanden sind, also fügt sie auch einen Datensatz mit der ID 2 ein. Dies wird definitiv fehlschlagen. Diese Situation wird als Phantomlesen bezeichnet.

Hinweis: InnoDB in MySQL löst Phantom-Lesevorgänge durch MVCC (Multi-Version Concurrency Control). Darüber hinaus ist die Standardtransaktionsebene von MySQL wiederholbares Lesen und die Standardisolationsebene von Oracle und SQL Server ist Read Committed.

SERIALISIERBAR

Serialisierbare Transaktionsebene, sperrt jede gelesene Datenzeile

Der Vorteil des Sperrens besteht darin, dass es Dirty Reads und Phantom Reads vermeidet und auch die Möglichkeit nicht wiederholbarer Lesevorgänge vermeidet. Durch das Sperren wird jedoch die Parallelität stark reduziert, da nur ein Thread gleichzeitig die Sperre erhalten kann. Dies kann auch viele Timeout-Probleme verursachen.

Zusammenfassung: Nicht wiederholbare Lesevorgänge und Phantom-Lesevorgänge können leicht verwechselt werden. Bei nicht wiederholbaren Lesevorgängen stehen Änderungen im Mittelpunkt, während bei Phantom-Lesevorgängen Hinzufügungen oder Löschungen im Mittelpunkt stehen. Um das Problem nicht wiederholbarer Lesevorgänge zu lösen, müssen Sie nur die Zeilen sperren, die die Bedingungen erfüllen. Um das Problem von Phantom-Lesevorgängen zu lösen, müssen Sie die Tabelle sperren.

Isolationsstufe:

Isolationsstufe Schmutzige Lektüre Nicht wiederholbares Lesen Phantom lesen
Nicht festgeschrieben lesen möglich möglich möglich
Lesen verpflichtet unmöglich möglich möglich
Wiederholbares Lesen unmöglich unmöglich möglich
Serialisierbar unmöglich unmöglich unmöglich

Je höher die Stufe, desto sicherer sind Ihre Daten, allerdings ist die Leistung geringer.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Tiefgreifendes Verständnis von verteilten PHP+MySQL-Transaktionen und -Lösungen
  • Eine kurze Analyse von MySQL-Sperren und -Transaktionen
  • Lassen Sie uns über die Merkmale und Isolationsstufen von MySQL-Transaktionen sprechen
  • So verwendet MySQL Transaktionen
  • Wie implementiert MySQL ACID-Transaktionen?
  • Warum MySQL große Transaktionen vermeiden sollte und wie man sie löst
  • Beispielanalyse des Prinzips der MySQL-Transaktionsisolationsebene
  • Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene

<<:  Docker-Dateispeicherpfad, Befehlsvorgang zum Starten des Containers abrufen

>>:  Detaillierte Erklärung zur Verwendung von ElementUI in Vue

Artikel empfehlen

So fahren Sie MySQL sicher herunter

Beim Herunterfahren des MySQL-Servers können, abh...

So vereinheitlichen Sie den Zeichensatz einer vorhandenen MySQL-Datenbank

Vorwort In der Datenbank sind einige Datentabelle...

Detaillierte Installation und Verwendung von RocketMQ in Docker

Um nach RocketMQ-Images zu suchen, können Sie auf...

$nextTick-Erklärung, die Sie auf einen Blick verstehen

Inhaltsverzeichnis 1. Funktionsbeschreibung 2. Üb...

So bedienen Sie Datei- und Ordnerberechtigungen unter Linux

Linux-Dateiberechtigungen Überprüfen wir zunächst...

Detaillierte Erklärung von :key in VUE v-for

Wenn der Schlüssel nicht zum v-for-Tag hinzugefüg...

Detaillierte Erklärung der Funktionen jedes Ports von Tomcat

Aus der Tomcat-Konfigurationsdatei können wir ers...

So erstellen Sie eine Vue3-Desktopanwendung

In diesem Artikel sehen wir uns an, wie man mit V...

JavaScript-Komposition und Vererbung erklärt

Inhaltsverzeichnis 1. Einleitung 2. Vererbung der...

So installieren und konfigurieren Sie Redis in CentOS7

Einführung Es ist nicht nötig, Redis im Detail vo...

Erläuterung des MySQL-Nicht-Null-Einschränkungsfalls

Inhaltsverzeichnis Legen Sie beim Erstellen einer...