Transaktion
Eine Transaktion bezieht sich auf eine Reihe von Vorgängen, die ACID-Merkmale erfüllen. Eine Transaktion kann über übermittelt werden Commit. Sie können Rollback auch zum Zurücksetzen verwenden.
ACID
1. Atomizität
Transaktionen gelten als unteilbar. Die kleinste Einheit der Transaktion , werden alle Vorgänge der Transaktion entweder erfolgreich übermittelt oder alle Vorgänge schlagen fehl und werden zurückgesetzt. Rollback kann mithilfe von Rollback-Protokollen implementiert werden. Das Rollback-Protokoll zeichnet die von der Transaktion durchgeführten Änderungsvorgänge auf. Diese Änderungsvorgänge können während des Rollbacks umgekehrt ausgeführt werden.
2. Konsistenz
Konsistenz bedeutet, dass eine Transaktion die Datenbank von einem Konsistenzzustand in einen anderen umwandeln muss, d. h. eine Transaktion muss sich in einem konsistenten Zustand befinden sowohl vor als auch nach der Ausführung.
Nehmen Sie als Beispiel eine Überweisung. Angenommen, das Gesamtgeld von Benutzer A und Benutzer B beträgt 5000. Unabhängig davon, wie die Überweisung zwischen A und B erfolgt oder wie oft die Überweisung abgeschlossen wird, ist das Geld von Die beiden Benutzer werden nach Abschluss der Transaktion gleich sein. Die Summe sollte 5000 ergeben, was der Konsistenz der Transaktion entspricht.
3. Isolation
Isolation liegt vor, wenn mehrere Benutzer gleichzeitig auf die Datenbank zugreifen, z. B. wenn die Datenbank für jeden Benutzer aktiviert wird. Die Transaktion kann nicht erfolgen durch den Betrieb anderer Transaktionen gestört werden und mehrere gleichzeitige Transaktionen müssen voneinander isoliert werden.
Das heißt, um einen solchen Effekt zu erzielen: Für zwei beliebige gleichzeitige Transaktionen T1 und T2 endet T2 aus Sicht der Transaktion T1 entweder vor dem Start von T1 oder beginnt nach dem Ende von T1, sodass sich jede Transaktion dessen nicht bewusst ist Andere Transaktionen werden gleichzeitig ausgeführt.
4. Haltbarkeit
Dauerhaftigkeit bedeutet, dass die Änderungen an den Daten in der Datenbank dauerhaft sind, auch wenn der Vorgang der Festschreibung von Transaktionen nicht erfolgt auch bei einem Ausfall des Datenbanksystems verloren gehen.
Parallelitätskonsistenzprobleme
1. Dirty Read
Dirty Read bezieht sich auf Daten von Während der Transaktionsverarbeitung wurde eine weitere nicht festgeschriebene Transaktion gelesen.
T1 ändert Daten und T2 liest diese Daten dann. Wenn T1 diese Änderung rückgängig macht, handelt es sich bei den von T2 gelesenen Daten um schmutzige Daten.
2. Nicht wiederholbares Lesen
Nicht wiederholbares Lesen bedeutet, dass für bestimmte Daten in der Datenbank im Rahmen von Eine Transaktion. Mehrere Abfragen haben unterschiedliche Datenwerte zurückgegeben. Dies liegt daran, dass sie zwischen den Abfragen durch eine andere Transaktion geändert und festgeschrieben wurden.
Transaktion T1 liest beispielsweise bestimmte Daten, und Transaktion T2 ändert die Daten sofort und übermittelt die Transaktion an die Datenbank. Transaktion T1 liest die Daten erneut, erhält andere Ergebnisse und sendet einen nicht wiederholbaren Lesevorgang.
Der Unterschied zwischen nicht wiederholbarem Lesen und schmutzigem Lesen besteht darin, dass beim schmutzigen Lesen eine Transaktion die nicht festgeschriebenen schmutzigen Daten einer anderen Transaktion liest, während beim nicht wiederholbaren Lesen die von der vorherigen Transaktion übermittelten Daten gelesen werden.
3. Phantomlesung
Phantomlesung ist ein Phänomen, das auftritt, wenn Transaktionen nicht unabhängig ausgeführt werden. Beispielsweise ändert Transaktion T1 ein Datenelement in allen Zeilen einer Tabelle von „1“ auf „2“. Zu diesem Zeitpunkt fügt Transaktion T2 eine Zeile mit Datenelementen in die Tabelle ein, und der Wert dieses Datenelements ist immer noch „1“. " und an die Datenbank übermittelt. Wenn der Benutzer, der die Transaktion T1 ausführt, die gerade geänderten Daten betrachtet, wird er feststellen, dass es noch eine Zeile gibt, die nicht geändert wurde. Tatsächlich ist diese Zeile wie eine Halluzination. Dies ist eine Phantomlesung.
Phantom-Lesevorgänge und nicht wiederholbare Lesevorgänge lesen jeweils eine andere festgeschriebene Transaktion (dies unterscheidet sich von schmutzigen Lesevorgängen. Der Unterschied besteht darin, dass nicht wiederholbare Lesevorgänge dasselbe Datenelement abfragen, während Phantom-Lesevorgänge dasselbe Datenelement abfragen). Das Lesen zielt auf einen Datenstapel als Ganzes ab (z. B. auf die Anzahl der Daten).
T1 liest Daten in einem bestimmten Bereich, T2 fügt neue Daten in diesem Bereich ein und T1 liest erneut Daten in diesem Bereich. Das zu diesem Zeitpunkt gelesene Ergebnis unterscheidet sich vom Ergebnis, das beim ersten Mal gelesen wurde.
MySQL-Isolationsstufe
1. Serialisierbar: Transaktionen erzwingen seriell ausgeführt.
Kann Dirty Reads, nicht wiederholbare Reads und Phantom Reads vermeiden.
2. Wiederholbares Lesen: Stellt sicher, dass das Ergebnis des mehrmaligen Lesens derselben Daten in derselben Transaktion dasselbe ist.
Dirty Reads können vermieden werden. Ein nicht- es erfolgt ein wiederholbarer Lesevorgang.
3. Read commit: Eine Transaktion kann nur die von der committeten Transaktion vorgenommenen Änderungen lesen
Dadurch kann das Auftreten von Dirty Reads vermieden werden.
4. Nicht festgeschrieben lesen: Änderungen in einer Transaktion sind für andere Transaktionen sichtbar, auch wenn sie nicht festgeschrieben sind
Die niedrigste Stufe, keine Garantie in jeder Situation.
Die höchste Isolationsstufe ist die Serialisierbarkeitsstufe und die niedrigste die nicht festgeschriebene Lesestufe. Je höher die Stufe, desto geringer ist die Ausführungseffizienz.
Eine Ebene wie Serializable verwendet eine Sperrtabelle (ähnlich der Sperre im Java-Multithreading), sodass andere Threads nur außerhalb der Sperre warten können. Daher sollte die Isolationsstufe, die Sie normalerweise wählen, auf der tatsächlichen Situation basieren . .
Die Standardisolationsstufe in der MySQL-Datenbank ist Wiederholbares Lesen.
In der Oracle-Datenbank werden nur zwei Ebenen unterstützt: Serialisierbarkeitsebene (Serialisierungsebene) und Lesefestschreibungsebene (Lesefestschreibungsebene).
Empfohlenes Lernen: MySQL-Tutorial
Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über Datenbanktransaktionen und Isolationsstufen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!