Detaillierte Erläuterung des MySQL-Isolationsebenen-Operationsprozesses (cmd)

Detaillierte Erläuterung des MySQL-Isolationsebenen-Operationsprozesses (cmd)

Beispielvorgang für nicht festgeschriebenes Lesen - Nicht festgeschriebenes Lesen

1. Öffnen Sie zwei MySql-Eingabeaufforderungszeilen, geben Sie dieselbe Datenbank ein und überprüfen Sie wie folgt, ob der aktuelle Tabelleninhalt dieselben Daten enthält:

2. Führen Sie select @@tx_isolation an beiden Enden A und B aus. Überprüfen Sie die aktuelle Standardisolationsstufe. Sie werden feststellen, dass beide

Wiederholbares Lesen – Wiederholbares Lesen – (Das wiederholte Lesen der Daten, die innerhalb der aktuellen Transaktion zum ersten Mal gelesen wurden, wird als wiederholbares Lesen bezeichnet.)

3. Ändern Sie die Isolationsebene von Ende A in readuncommitted – read uncommitted. Dadurch können Sie Daten lesen, die von anderen nicht übermittelt wurden.

Legen Sie die Transaktionsisolierungsebene „Lesen nicht fest“ fest.

Führen Sie auf dem grünen MySql5.5 Folgendes aus:

Legen Sie die Isolationsebene für Sitzungstransaktionen fest und lesen Sie nicht fest.

Überprüfen Sie anschließend, ob die Änderungen vorgenommen wurden:

4. Starten Sie Transaktionen an beiden Enden A und B

Transaktion starten;

5. Ändern Sie eine Datenzeile auf der B-Seite wie:

Aktualisiere Stud Setname='Jhon', wobei ID=1 ist;

Führen Sie dann die Abfrage auf Seite A aus: select * from stud;

6. Zu diesem Zeitpunkt führt die B-Seite den Rollback-Vorgang erneut aus

Zurückrollen;

Fragen Sie dann Ende A ab und stellen Sie fest, dass die Daten zu den vorherigen Daten zurückgekehrt sind. Das ist eine schmutzige Lektüre :

7. Wenn die von der B-Seite geschriebenen neuen Daten nicht übermittelt werden, kann die A-Seite sie auch abfragen. Dies wird als Phantomlesen bezeichnet.

Prozess zum Lesen des festgeschriebenen Vorgangs: -read COMMITTED

1. Prüfen Sie, ob A und B konsistent sind:

2. Ändern Sie die Isolationsebene von Ende A (links) auf „readcommitted“.

Festlegen der Transaktionsisolationsebene, Lesen festgeschrieben;

Starten Sie eine Transaktion auf Seite A:

Transaktion starten;

Starten Sie eine Transaktion auf Seite B

3. Abfrage am Ende A:

Wählen Sie * fromstud;

Ändern Sie eine Datensatzzeile auf der B-Seite und senden Sie sie ab.

Aktualisieren Sie Stud Setname='itcast', wobei ID=1 ist;

Gehen Sie zurück zum Ende der Abfrage A und stellen Sie fest, dass die Ergebnisse der beiden Abfragen in derselben Transaktion unterschiedlich sind:

Beispiel für wiederholbares Lesen

1. Überprüfen Sie, ob die Isolationsstufe von Ende A ein wiederholbares Lesen ist:

Auswählen@@tx_isolation;

2. Erste Abfrage auf der A-Seite in der offenen Transaktion.

Ändern Sie dann den Inhalt der Datenbank auf der B-Seite.

Führen Sie abschließend in derselben Transaktion am Ende A eine erneute Abfrage durch und stellen Sie sicher, dass die Ergebnisse konsistent sind.

Serialisierbar ist die höchste Isolationsstufe

1. Stellen Sie die Isolationsstufe auf Serialisierbar am Ende A ein

Legen Sie die serialisierbare Transaktionsisolationsebene fest.

Öffnen Sie eine Transaktion auf der A-Seite und fragen Sie die Stud-Tabelle ab.

Öffnen Sie eine Transaktion auf der B-Seite und schreiben Sie eine Datensatzzeile. Zu diesem Zeitpunkt wird festgestellt, dass der Code von B nicht ausgeführt wurde, da er auf die Übermittlung durch A wartet, bevor er ausgeführt wird.

Ähnlich dem Konzept der Thread-Synchronisation

Diese vier Isolationsebenen werden mithilfe unterschiedlicher Sperrtypen implementiert. Beim Lesen derselben Daten treten wahrscheinlich Probleme auf. Zum Beispiel:

Dirty Read: Eine Transaktion hat ein Datenelement aktualisiert und eine andere Transaktion liest zu diesem Zeitpunkt dieselben Daten. Aus irgendeinem Grund führt die vorherige Transaktion einen RollBack für den Vorgang aus und die von der zweiten Transaktion gelesenen Daten sind falsch.

Nicht wiederholbares Lesen: Die Daten zwischen zwei Abfragen in einer Transaktion sind inkonsistent. Dies kann daran liegen, dass eine Transaktion die Originaldaten zwischen den beiden Abfragen aktualisiert hat.

Phantom Read: Die Anzahl der Dateneinträge in zwei Abfragen einer Transaktion ist inkonsistent. Beispielsweise fragt eine Transaktion mehrere Datenzeilen ab, während eine andere Transaktion zu diesem Zeitpunkt mehrere neue Datenzeilen einfügt. Bei der nächsten Abfrage findet die vorherige Transaktion mehrere Datenzeilen, die sie vorher nicht hatte.

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:
  • Tiefgreifendes Verständnis der vier Isolationsebenen von MySQL
  • Detaillierte Erläuterung der vier Transaktionsisolationsebenen in MySQL
  • Analyse der vier Transaktionsisolationsstufen in MySQL anhand von Beispielen
  • Beispielanalyse des Prinzips der MySQL-Transaktionsisolationsebene
  • Detaillierte Erläuterung des Implementierungsprinzips der Transaktionsisolationsstufe in MySQL
  • Detaillierte Erklärung und Beispiele der MySQL-Isolationsebene

<<:  Linux-Grundlagen-Tutorial: Sonderberechtigungen SUID, SGID und SBIT

>>:  So verwenden Sie Balkendiagramme in Vue und ändern die Konfiguration selbst

Artikel empfehlen

Benutzerdefinierte Docker-Netzwerkimplementierung

Inhaltsverzeichnis 1. Passen Sie das Netzwerk an,...

jQuery realisiert Bildhervorhebung

Es ist sehr üblich, Bilder auf einer Seite hervor...

So verstehen Sie die Modularität von JavaScript

Inhaltsverzeichnis 1. Browserunterstützung 2. Exp...

Beispielcode zur Implementierung eines Foto-Stacking-Effekts mit CSS

Ergebnisse erzielen Schritt 1. Ursprüngliche inde...

MySQL-Daemon konnte nicht gestartet werden – Fehlerlösung

MySQL-Daemon konnte nicht gestartet werden – Fehl...

Erklärung des Konzepts und der Verwendung von Like in MySQL

Like bedeutet auf Chinesisch „wie“, aber wenn es ...

js realisiert den Lupeneffekt von Produkten auf Einkaufswebsites

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

Beispiele für korrekte Beurteilungsmethoden für Datentypen in JS

Inhaltsverzeichnis Vorwort Kann typeof den Typ ko...

So erstellen Sie ein Django-Projekt und stellen eine Verbindung zu MySQL her

1: django-admin.py startproject Projektname 2: CD...

MySQL-Zeittypauswahl

Inhaltsverzeichnis DATETIME ZEITSTEMPEL Wie man w...

MySQL kontrolliert die Anzahl der Versuche, falsche Passwörter einzugeben

1. So überwachen Sie MySQL-Deadlocks in Produktio...