Heim >Datenbank >MySQL-Tutorial >Leistungsstarke MySQL-detaillierte Erläuterung von Transaktionen und Isolationsstufen
Dieser Artikel enthält hauptsächlich die folgenden Inhalte:
(1) Das Konzept von Transaktionen und ACID
(2) Transaktionsisolationsstufe
(3) Transaktionen in MySQL
Das Verständnis von Transaktionen ist die Grundlage für andere fortgeschrittene Konzepte.
Lassen Sie uns die Konzepte von ACID in der Datenbank verstehen: Atomizität, Konsistenz, Isolation und Haltbarkeit.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.
(1) Atomarität: Die Vorgänge in einer Transaktion bilden eine unteilbare Gesamteinheit, entweder werden alle ausgeführt oder keine.
-- 开始事务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.
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: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!