MySQL-Transaktionen
MySQL-Transaktionen werden hauptsächlich verwendet, um Daten mit großen Operationsmengen und hoher Komplexität zu verarbeiten. In einem Personalverwaltungssystem beispielsweise müssen Sie beim Löschen einer Person nicht nur deren Grunddaten löschen, sondern auch die mit dieser Person verbundenen Informationen wie E-Mail-Postfächer, Artikel und so weiter. Auf diese Weise bilden diese Datenbankoperationen eine Transaktion!
In MySQL ist eine Transaktion die Ausführung einer Gruppe von SQL-Anweisungen, die als eine einzige Arbeitseinheit behandelt werden.
- In MySQL unterstützen nur Datenbanken oder Tabellen, die die InnoDB-Datenbank-Engine verwenden, Transaktionen.
- Die Transaktionsverarbeitung kann verwendet werden, um die Integrität der Datenbank zu wahren und sicherzustellen, dass eine Gruppe von SQL-Anweisungen entweder vollständig oder gar nicht ausgeführt wird.
- Transaktionen werden verwendet, uminsert-, update-, delete-Anweisungen zu verwalten
Im Allgemeinen muss eine Transaktion 4 Bedingungen erfüllen (ACID): Atomarität (Aatomicity bzw. Unteilbarkeit), Konsistenz (Cconsistency), Isolation (Iisolation, auch als Unabhängigkeit bekannt), Dauerhaftigkeit (Dauerhaftigkeit)。
Atomarität:Alle Operationen einer Transaktion müssen entweder vollständig abgeschlossen werden oder überhaupt nicht abgeschlossen werden, und die Transaktion darf nicht in einem Zwischenstadium enden. Tritt während der Ausführung der Transaktion ein Fehler auf, wird sie auf den Zustand vor dem Start der Transaktion zurückgerollt, gerade als wäre die Transaktion nie ausgeführt worden.
Konsistenz:Die Integrität der Datenbank wird vor dem Beginn der Transaktion und nach dem Ende der Transaktion nicht beeinträchtigt. Das bedeutet, dass die geschriebenen Daten alle vorgegebenen Regeln vollständig erfüllen müssen, einschließlich der Genauigkeit und Verkettung der Daten sowie der Fähigkeit der Datenbank, die geplante Arbeit anschließend selbstständig abzuschließen.
Isolation:Die Fähigkeit einer Datenbank, mehreren gleichzeitigen Transaktionen zu ermöglichen, ihre Daten gleichzeitig zu lesen, zu schreiben und zu ändern. Isolation kann Dateninkonsistenzen verhindern, die durch verschränkte Ausführung entstehen, wenn mehrere Transaktionen gleichzeitig ausgeführt werden. Transaktionsisolation wird in verschiedene Stufen unterteilt, darunter Read uncommitted, Read committed, Repeatable read und Serializable.
Dauerhaftigkeit:Nach Abschluss der Transaktionsverarbeitung sind die Änderungen an den Daten dauerhaft und gehen auch bei einem Systemausfall nicht verloren.
Unter den Standardeinstellungen der MySQL-Befehlszeile werden Transaktionen automatisch festgeschrieben, das heißt, nach dem Ausführen einer SQL-Anweisung wird sofort ein COMMIT-Vorgang ausgeführt. Um eine Transaktion explizit zu starten, müssen Sie daher den Befehl BEGIN oder START TRANSACTION verwenden oder den Befehl SET AUTOCOMMIT=0 ausführen, um die automatische Festschreibung für die aktuelle Sitzung zu deaktivieren.
Transaktionssteuerungsanweisungen:
BEGIN oder START TRANSACTION startet explizit eine Transaktion;
COMMIT oder COMMIT WORK, obwohl die beiden äquivalent sind. COMMIT schreibt die Transaktion fest und macht alle an der Datenbank vorgenommenen Änderungen dauerhaft;
ROLLBACK oder ROLLBACK WORK, obwohl die beiden äquivalent sind. Rollback beendet die Transaktion des Benutzers und macht alle noch nicht festgeschriebenen laufenden Änderungen rückgängig;
SAVEPOINT identifier. SAVEPOINT ermöglicht das Erstellen eines Speicherpunkts in einer Transaktion, und eine Transaktion kann mehrere SAVEPOINTs haben;
RELEASE SAVEPOINT identifier löscht einen Speicherpunkt einer Transaktion. Wenn der angegebene Speicherpunkt nicht existiert, löst die Ausführung dieser Anweisung eine Ausnahme aus;
ROLLBACK TO identifier rollt die Transaktion bis zum markierten Punkt zurück;
SET TRANSACTION wird verwendet, um die Isolationsstufe einer Transaktion festzulegen. Die InnoDB-Speicher-Engine bietet Transaktionsisolationsstufen wie READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE.

Für die MySQL-Transaktionsverarbeitung gibt es hauptsächlich zwei Methoden:
1. Mit BEGIN, ROLLBACK, COMMIT implementieren
- BEGIN oder START TRANSACTION: wird verwendet, um eine Transaktion zu starten.
- ROLLBACKTransaktions-Rollback, wobei die vorherigen Änderungen rückgängig gemacht werden.
- COMMIT: Transaktionsbestätigung, Festschreiben der Transaktion, wodurch die Änderungen dauerhaft gemacht werden.
2. SET direkt verwenden, um den Auto-Commit-Modus von MySQL zu ändern:
- SET AUTOCOMMIT=0Auto-Commit deaktivieren
- SET AUTOCOMMIT=1Auto-Commit aktivieren
BEGIN oder START TRANSACTION-- Wird verwendet, um eine Transaktion zu starten:
BEGIN; -- 或者使用 START TRANSACTION;
COMMIT-- Wird verwendet, um die Transaktion festzuschreiben und alle Änderungen dauerhaft in der Datenbank zu speichern:
COMMIT;
ROLLBACK-- Wird verwendet, um die Transaktion zurückzurollen und alle seit dem letzten Commit vorgenommenen Änderungen rückgängig zu machen:
ROLLBACK;
SAVEPOINT-- Wird verwendet, um einen Speicherpunkt innerhalb der Transaktion festzulegen, sodass Sie später zu diesem Punkt zurückrollen können:
SAVEPOINT savepoint_name;
ROLLBACK TO SAVEPOINT-- Wird verwendet, um zu einem zuvor festgelegten Speicherpunkt zurückzurollen:
ROLLBACK TO SAVEPOINT savepoint_name;
Nachfolgend ein einfaches Beispiel einer MySQL-Transaktion:
Beispiel
START TRANSACTION;
-- Einige SQL-Anweisungen ausführen
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
-- Entscheiden, ob ein Commit oder Rollback durchgeführt werden soll
IF (Condition) THEN
COMMIT; -- Transaktion festschreiben
ELSE
ROLLBACK; -- Transaktion zurückrollen
END IF;
Beispiel
Ein einfaches Transaktionsbeispiel: