Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank

Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank

Isolationsebene für Datenbanktransaktionen

Es gibt 4 Isolationsstufen für Datenbanktransaktionen, von niedrig bis hoch:

  1. Nicht festgeschriebenes Lesen: Dirty Reads sind zulässig.
  2. Read Committed: Verhindert Dirty Reads. Dies ist die am häufigsten verwendete Isolationsebene und die Standardisolationsebene für die meisten Datenbanken.
  3. Wiederholbares Lesen: Es kann Dirty Read und nicht wiederholbares Lesen verhindern.
  4. Serialisierbar: Es kann Dirty Reads, nicht wiederholbare Reads und Phantom Reads verhindern und (die Transaktionsserialisierung) verringert die Effizienz der Datenbank.

Diese vier Ebenen können die Probleme „Dirty Read“, „Non-Repeatable Read“ und „Phantom Read“ nacheinander lösen.

√: Kann erscheinen ×: Wird nicht erscheinen

Transaktionsebene Schmutzige Lektüre Nicht wiederholbares Lesen Phantom lesen
Nicht festgeschrieben lesen
Lesen verpflichtet ×
Wiederholbares Lesen × ×
Serialisierbar × × ×

Hinweis: Wir diskutieren das Szenario der Isolationsebene hauptsächlich, wenn mehrere Transaktionen gleichzeitig ausgeführt werden.

Dirty Reads, Phantom Reads und nicht wiederholbare Reads

Schmutzige Lektüre:

Dirty Read bedeutet, dass, wenn eine Transaktion auf Daten zugreift und diese ändert, und diese Änderung nicht an die Datenbank übermittelt wurde, eine andere Transaktion ebenfalls auf die Daten zugreift und die Daten verwendet.

Nicht wiederholbares Lesen:

Dabei werden dieselben Daten innerhalb einer Transaktion mehrmals gelesen. Bevor diese Transaktion beendet wird, greift eine weitere Transaktion auf dieselben Daten zu. Daher können die von der ersten Transaktion zweimal gelesenen Daten zwischen den beiden Lesevorgängen in der ersten Transaktion aufgrund der Änderung der zweiten Transaktion unterschiedlich sein. Dies bedeutet, dass die in einer Transaktion zweimal gelesenen Daten unterschiedlich sind; deshalb spricht man vom nicht wiederholbaren Lesen. (Das heißt, derselbe Dateninhalt kann nicht gelesen werden)

Phantomlesung:

Es bezeichnet ein Phänomen, das auftritt, wenn Transaktionen nicht unabhängig voneinander ausgeführt werden. Beispielsweise ändert die erste Transaktion die Daten in einer Tabelle, und diese Änderung betrifft alle Datenzeilen in der Tabelle. Gleichzeitig ändert die zweite Transaktion auch die Daten in dieser Tabelle, indem sie eine neue Datenzeile in die Tabelle einfügt. Dann kann es passieren, dass der Benutzer bei der ersten Transaktion wie bei einer Halluzination feststellt, dass in der Tabelle immer noch unveränderte Datenzeilen vorhanden sind.

Beispiel:

Oberfläche:

Tabelle erstellen `cc_wsyw126_user_test_isolation_copy` (
 `id` int(11) NICHT NULL AUTO_INCREMENT,
 `Passwort` varchar(64) NOT NULL,
 `Alter` int(11) NICHT NULL,
 Primärschlüssel (`id`),
 SCHLÜSSEL `ix_age` (`Alter`)
)ENGINE=MyISAM STANDARD-CHARSET=utf8;

Simulierte Daten:

INSERT INTO `cc_wsyw126_user_test_isolation_copy` (`Passwort`, `Alter`) 
WERTE 
('1', 1),
('zweiundzwanzig),
('3', 3),
('4', 4);

Die erste Transaktion A:

Transaktion starten 
in cc_wsyw126_user_test_isolation_copy (Passwort, Alter) Werte einfügen ('5',5)
begehen

Die zweite Transaktion B:

Transaktion starten 
Aktualisiere cc_wsyw126_user_test_isolation_copy und setze Alter = 2, wobei Passwort >='2' ist.
Wählen Sie * aus cc_wsyw126_user_test_isolation_copy, wobei Kennwort >= „2“ ist.
begehen

Schritte zum Reproduzieren:

Solange die Insert-Anweisung der Transaktion A vor der Select-Anweisung und nach der Update-Anweisung der Transaktion B steht, ist alles in Ordnung.

Die MySQL InnoDB-Speicher-Engine implementiert ein Multi-Version Concurrency Control-Protokoll – MVCC (Multi-Version Concurrency Control) sowie eine Next-Key-Locking-Strategie, um Phantom-Lesevorgänge auf der Isolationsebene Repeatable Read (RR) zu verhindern. Wenn Sie Phantom-Lesevorgänge testen möchten, experimentieren Sie mit MyISAM.

Wenn in einem gruppierten Index (Primärschlüsselindex) eine eindeutige Einschränkung vorliegt, stuft InnoDB die standardmäßige Next-Key-Sperre auf eine Datensatzsperre herab.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Tutorial zur Beziehung zwischen Innodb-Transaktionsisolationsebene und Sperre in MySQL
  • Einführung in MySQL-Isolationsebene, Sperre und MVCC
  • Beispielanalyse für MySQL-Transaktionen, Isolationsebenen und Sperrenverwendung
  • Tiefgreifendes Verständnis der vier Isolationsebenen von MySQL
  • Detaillierte Erklärung und Vergleich der vier Transaktionsisolationsebenen in MySQL
  • Detaillierte Erläuterung der vier Transaktionsisolationsebenen in MySQL
  • Detaillierte Erläuterung des Lese-Commits der MySQL-Transaktionsisolationsebene
  • Ausführliche Erläuterung der MySQL-Isolationsebene und des Sperrmechanismus

<<:  So kapseln Sie die Tabellenkomponente von Vue Element

>>:  Einführung in die Nginx-Protokollverwaltung

Artikel empfehlen

Docker Compose-Übung und Zusammenfassung

Docker Compose kann die Orchestrierung von Docker...

So kapseln Sie Abfragekomponenten basierend auf Element-UI Schritt für Schritt

Inhaltsverzeichnis Funktion Grundlegende Abfragef...

Implementierungsschritte zur Kapselung von Komponenten basierend auf React

Inhaltsverzeichnis Vorwort Wie kapselt Antd Kompo...

vue $set implementiert die Zuweisung von Werten zu Array-Sammlungsobjekten

Vue $set Array-Sammlungsobjektzuweisung In der be...

So installieren Sie MySQL unter Linux (Yum und Quellcode-Kompilierung)

Es gibt zwei Möglichkeiten, MySQL unter Linux zu ...

Verwendungsanweisungen für den Befehl „Docker Create“

Mit dem Befehl „Docker Create“ können Sie einen C...

So erstellen Sie einen Index für eine Join-Tabelle in MySQL

In diesem Artikel wird erläutert, wie Sie einen I...

Kompilieren Sie CPP-Dateien mit G++ in Ubuntu

Als ich die CPP-Datei zum ersten Mal mit G++ komp...

Ist Ihre Website für IE8 geeignet?

Während der Olympischen Spiele wird IE 8 Beta 2 ve...

CentOS 7.x Docker verwendet die Overlay2-Speichermethode

Bearbeiten Sie /etc/docker/daemon.json und fügen ...

jQuery implementiert einen einfachen Kommentarbereich

In diesem Artikel wird der spezifische Code von j...

Anwendungsverschachtelung von HTML-ul-ungeordneten Tabellen

Anwendungsschachtelung ungeordneter Listen Code ko...

Mysql 5.6.37 Winx64-Installation Dual-Version MySQL-Hinweise

Wenn MySQL Version 5.0 bereits auf dem Computer v...