Heim  >  Artikel  >  Datenbank  >  Detaillierte Erläuterung der Transaktionsisolationsstufe

Detaillierte Erläuterung der Transaktionsisolationsstufe

藏色散人
藏色散人Original
2020-03-03 10:28:2318100Durchsuche

Detaillierte Erläuterung der Transaktionsisolationsstufe

Isolationsebene der Transaktion

Um bei Datenbankoperationen die Richtigkeit gleichzeitig gelesener Daten effektiv sicherzustellen, Die vorgeschlagene Transaktionsisolationsstufe.

Empfohlen: „MySQL-Tutorial

Fragen stellen

Die Datenbank sollte von Kunden geteilt und abgerufen werden Während des Datenbankbetriebs können folgende unsichere Situationen auftreten.

Aktualisierung verloren

Beide Transaktionen aktualisieren gleichzeitig eine Datenzeile, und die Aktualisierung der Daten durch eine Transaktion überschreibt die Aktualisierung der Daten durch die andere Transaktion. Dies liegt daran, dass das System keine Sperrvorgänge durchführt, sodass gleichzeitige Transaktionen nicht isoliert sind.

Dirty Read

Eine Transaktion liest die nicht festgeschriebenen Datenoperationsergebnisse einer anderen Transaktion. Dies ist ziemlich gefährlich, da die Möglichkeit besteht, dass alle Vorgänge zurückgesetzt werden.

Nicht wiederholbare Lesevorgänge

Nicht wiederholbare Lesevorgänge: Eine Transaktion liest dieselbe Datenzeile zweimal, erhält jedoch unterschiedliche Ergebnisse.

Beinhaltet die folgenden Situationen:

(1) Virtuelles Lesen: Nachdem Transaktion T1 bestimmte Daten gelesen hat, ändert Transaktion T2 diese und wenn Transaktion T1 sie erneut liest, Dies Daten erhalten einen anderen Wert als beim vorherigen Mal.

(2) Phantom-Lesevorgänge: Die Transaktion führt während des Vorgangs zwei Abfragen durch. Das Ergebnis der zweiten Abfrage enthält Daten, die in der ersten Abfrage nicht enthalten waren oder in der ersten Abfrage fehlen. die SQL-Anweisungen der beiden Abfragen müssen nicht identisch sein). Dies wird durch eine andere Transaktion verursacht, die während der beiden Abfragen Daten einfügt.

Lösung

Um die oben genannten Situationen zu vermeiden, sind in der Standard-SQL-Spezifikation 4 Transaktionsisolationsstufen definiert, die unterschiedliche Auswirkungen auf die Transaktionsverarbeitung haben ist anders.

Unautorisiertes Lesen

Auch bekannt als Read Uncommitted: Dirty Reads sind zulässig, verlorene Aktualisierungen sind jedoch nicht zulässig. Wenn eine Transaktion mit dem Schreiben von Daten begonnen hat, darf eine andere Transaktion nicht gleichzeitig schreiben, aber andere Transaktionen dürfen diese Datenzeile lesen. Diese Isolationsstufe kann durch eine „exklusive Schreibsperre“ erreicht werden.

Authorized Read

Auch bekannt als Read Committed: Nicht wiederholbare Lesevorgänge sind zulässig, Dirty Reads sind jedoch nicht zulässig. Dies kann durch „vorübergehende gemeinsame Lesesperren“ und „exklusive Schreibsperren“ erreicht werden. Die Transaktion, die die Daten liest, ermöglicht es anderen Transaktionen, weiterhin auf die Datenzeile zuzugreifen, aber die nicht festgeschriebene Schreibtransaktion verhindert, dass andere Transaktionen auf die Zeile zugreifen.

Wiederholbares Lesen

Wiederholbares Lesen: Nicht wiederholbare Lesevorgänge und Dirty Reads sind verboten, es können jedoch manchmal Phantom-Lesedaten auftreten. Dies kann durch „gemeinsame Lesesperren“ und „exklusive Schreibsperren“ erreicht werden. Transaktionen, die Daten lesen, deaktivieren Schreibtransaktionen (lassen jedoch Lesetransaktionen zu), und Schreibtransaktionen deaktivieren alle anderen Transaktionen.

Serialisierbar

Serialisierbar: Bietet strikte Transaktionsisolation. Es erfordert, dass Transaktionen seriell ausgeführt werden, und Transaktionen können nur nacheinander und nicht gleichzeitig ausgeführt werden. Die Serialisierung von Transaktionen kann nicht nur durch „Sperren auf Zeilenebene“ erreicht werden, um sicherzustellen, dass die Transaktion, die gerade den Abfragevorgang ausgeführt hat, nicht auf neu eingefügte Daten zugreift.

Je höher die Isolationsstufe, desto vollständiger und konsistenter können die Daten garantiert werden, aber desto größer ist auch die Auswirkung auf die Parallelitätsleistung. Für die meisten Anwendungen können Sie der Isolationsstufe des Datenbanksystems Vorrang auf „Read Committed“ geben. Es kann Dirty Reads vermeiden und bietet eine bessere Parallelitätsleistung. Obwohl dies zu Parallelitätsproblemen wie nicht wiederholbaren Lesevorgängen, Phantom-Lesevorgängen und verlorenen Aktualisierungen vom Typ II führt, können solche Probleme in einzelnen Situationen, in denen solche Probleme auftreten können, von der Anwendung mithilfe pessimistischer Sperren oder optimistischer Sperren gesteuert werden.

Weitere Inhalte zum Thema Programmierung finden Sie in der Spalte Einführung in die Programmierung auf der chinesischen PHP-Website!

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Transaktionsisolationsstufe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn