Heim >Datenbank >MySQL-Tutorial >Leistungsstarke MySQL-detaillierte Erläuterung von Transaktionen und Isolationsstufen

Leistungsstarke MySQL-detaillierte Erläuterung von Transaktionen und Isolationsstufen

黄舟
黄舟Original
2017-03-15 17:19:061273Durchsuche


Dieser Artikel enthält hauptsächlich die folgenden Inhalte:
(1) Das Konzept von Transaktionen und ACID
(2) Transaktionsisolationsstufe
(3) Transaktionen in MySQL

1. Transaktionen und ACID

Das Verständnis von Transaktionen ist die Grundlage für andere fortgeschrittene Konzepte.

Transaktion: Eine Transaktion ist eine Reihe von atomaren SQL--Abfragen oder eine unabhängige Ausführungseinheit. Entweder alle sind erfolgreich oder alle schlagen fehl 🎜>Status der Transaktion.

Lassen Sie uns die Konzepte von ACID in der Datenbank verstehen: Atomizität, Konsistenz, Isolation und Haltbarkeit.

(1) Atomarität: Die Vorgänge in einer Transaktion bilden eine unteilbare Gesamteinheit, entweder werden alle ausgeführt oder keine.

(2) Konsistenz: Die Datenbank muss vor und nach der Transaktionsausführung in einem konsistenten Zustand sein.

(3) Isolierung: Im Allgemeinen sind von einer Transaktion vorgenommene Änderungen vor der endgültigen Übermittlung für andere Transaktionen nicht sichtbar. Dabei geht es um die Frage der Transaktionsisolationsstufe.

(4) Haltbarkeit: Sobald die Transaktion übermittelt wurde, ist die Änderung dauerhaft und wird auch bei einem Serverausfall nicht beeinträchtigt.

Um ACID besser zu verstehen, nehmen wir als Beispiel eine Bankkontoüberweisung:

-- 开始事务START TRANSACTION;
-- 查询支票账户余额+
SELECT balance FROM checking WHERE customer_id = 10233276;+
-- 将支票账户减去200UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276;
-- 将余额账户增加200UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276;
-- 提交事务更新COMMIT;
Atomizität: Entweder vollständig festschreiben (der Girosaldo von 10233276 wird um 200 reduziert, und der Der Sparsaldo wird um 200 erhöht) oder vollständig zurückgesetzt (der Saldo beider Tabellen ändert sich nicht)

Konsistenz: Die Konsistenz dieses Beispiels spiegelt sich in der Tatsache wider, dass sich 200 Yuan aufgrund des Datenbanksystems nicht ändern Läuft zur 3. Reihe und zur 4. Reihe. Die vorherige Zeile ist abgestürzt und verschwunden, weil das Ding noch nicht festgeschrieben wurde.

Isolierung: Die Operationsanweisungen in einer Transaktion dürfen von den Anweisungen anderer Transaktionen isoliert werden. Beispielsweise wird Transaktion A nach Zeile 3 und vor Zeile 4 ausgeführt, und Transaktion B fragt zu diesem Zeitpunkt den Prüfsaldo ab . Es kann immer noch die 200 Yuan sehen, die in Transaktion A abgezogen wurden (das Kontogeld bleibt unverändert), da die Transaktionen A und B voneinander isoliert sind. Bevor Transaktion A festgeschrieben wird, kann Transaktion B die Datenänderungen nicht beobachten.

Persistenz: Dies ist leicht zu verstehen, das heißt, die Änderung ist nach der Übermittlung der Transaktion dauerhaft.

Transaktionen erfordern wie Sperren viel Arbeit, sodass Sie entscheiden können, ob Sie Transaktionsunterstützung benötigen, und basierend auf Ihren eigenen Anforderungen verschiedene Speicher-Engines auswählen können.

2. Transaktionsisolationsstufe

SQL definiert vier Isolationsstufen, um zu begrenzen, welche Daten innerhalb einer Transaktion sichtbar sind. Es ist offensichtlich, dass niedrige Isolationsstufen eine höhere Parallelität und einen geringeren Systemaufwand mit sich bringen, aber damit auch Probleme bei der Datensicherheit einhergehen.

Nicht festgeschriebenes Lesen (nicht festgeschriebenes Lesen)

Auf dieser Isolationsstufe können alle Transaktionen die Ausführungsergebnisse anderer nicht festgeschriebener Transaktionen sehen. Das Lesen nicht festgeschriebener Daten wird auch als Dirty Read bezeichnet. Diese Stufe wird selten verwendet.

Read Committed

Dies ist die Standardisolationsstufe für die meisten Datenbanksysteme (jedoch nicht die MySQL-Standardeinstellung). Es entspricht der einfachen Definition von Isolation: Eine Transaktion kann nur Änderungen sehen, die von festgeschriebenen Transaktionen vorgenommen wurden. Mit anderen Worten, sie ist für andere Transaktionen unsichtbar, bevor die Transaktion festgeschrieben wird. Diese Isolationsstufe unterstützt auch nicht wiederholbares Lesen, da andere Instanzen derselben Transaktion während der Verarbeitung dieser Instanz möglicherweise neue Festschreibungen vornehmen, sodass dieselbe Auswahlabfrage möglicherweise unterschiedliche Ergebnisse zurückgibt.

Wiederholbares Lesen (wiederholbares Lesen)

Dies ist die Standardtransaktionsisolationsstufe von MySQL Es stellt sicher, dass mehrere Instanzen derselben Transaktion ausgeführt werden können gleichzeitig ausführen Beim Lesen der Daten werden dieselben Datenzeilen angezeigt. Theoretisch führt dies jedoch zu einem weiteren heiklen Problem: Phantom Read (Phantom Read). Vereinfacht ausgedrückt bedeutet Phantomlesen, dass, wenn der Benutzer einen bestimmten Bereich von Datenzeilen liest, eine andere Transaktion eine neue Zeile in den Bereich einfügt. Wenn der Benutzer die Datenzeilen im Bereich liest, wird er feststellen, dass es neue „Phantome“ gibt . InnoDB- und Falcon-Speicher-Engines lösen dieses Problem durch den Multiversion-Parallelitätskontrollmechanismus (MVCC, Multiversion Concurrency Control).

Serialisierbar

Dies ist die höchste Isolationsstufe. Sie erzwingt die serielle Ausführung von Transaktionen, wodurch es unmöglich wird, dass sie miteinander in Konflikt geraten . Mit anderen Worten: Für jede gelesene Datenzeile wird eine gemeinsame Sperre hinzugefügt. Auf dieser Ebene kann es zu zahlreichen Zeitüberschreitungen und Sperrenkonflikten kommen.

Die Probleme, die bei der Implementierung dieser vier Isolationssektoren in MySQL auftreten können, sind wie folgt:


Leistungsstarke MySQL-detaillierte Erläuterung von Transaktionen und Isolationsstufen

3. Transaktionen in MySQL

Die Standardeinstellung in MySQL ist die Übernahme des automatischen Festschreibungsmodus (AutoCommit), was bedeutet, dass, solange eine Transaktion nicht explizit gestartet wird, jede Abfrageoperation als Transaktion zur Durchführung einer Festschreibungsoperation behandelt wird.

Wir können den automatischen Commit-Modus aktivieren oder deaktivieren, indem wir die Variable AUTOCOMMIT festlegen.
Einstellung 1 bedeutet die Aktivierung von AUTOCOMMIT, 0 bedeutet die Deaktivierung von AUTOCOMMIT.


Dieser Artikel enthält hauptsächlich die folgenden Inhalte:
(1) Das Konzept von Transaktionen und ACID
(2) Transaktionsisolationsstufe
(3) Transaktionen in MySQL

Das obige ist der detaillierte Inhalt vonLeistungsstarke MySQL-detaillierte Erläuterung von Transaktionen und Isolationsstufen. 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