Der Inhalt dieses Artikels ist eine detaillierte Einführung (Codebeispiele) zum Wissen über MySQL-Transaktionen. Ich hoffe, dass er für Sie hilfreich ist . hat geholfen.
MySQL-Transaktionen und Transaktionsisolationsstufen
MySQL-Transaktionen werden hauptsächlich zur Verarbeitung von Daten mit großen Vorgängen und hoher Komplexität verwendet. Wenn Sie beispielsweise im Personalverwaltungssystem eine Person löschen, werden die grundlegenden Informationen der Person sowie die mit der Person verbundenen Informationen wie Postfach, Artikel usw. gelöscht. Diese Datenbankbetriebsanweisungen stellen eine Transaktion dar (empfohlener Kurs: MySQL-Tutorial)
Nur Datenbanken oder Tabellen, die die Innodb-Datenbank-Engine in MySQL verwenden, unterstützen Transaktionen
Transaktionsverarbeitung kann verwendet werden, um die Integrität der Datenbank aufrechtzuerhalten und sicherzustellen, dass Stapel von SQL-Anweisungen entweder alle ausgeführt oder nicht ausgeführt werden
Transaktionen werden zum Verwalten von Einfügungen, Aktualisierungen usw. verwendet. und Löschanweisungen
Im Allgemeinen müssen Transaktionen 4 Bedingungen erfüllen: Atomizität, Konsistenz, Isolation, Haltbarkeit
Atomizität: Alle Vorgänge in einer Transaktion werden entweder alle ausgeführt oder keine werden ausgeführt und landen nicht irgendwo in der Mitte. Wenn während der Ausführung der Transaktion ein Fehler auftritt, wird sie auf den Zustand vor Beginn der Transaktion zurückgesetzt
Konsistenz: Vor Beginn der Transaktion und nach dem Wenn die Transaktion endet, wird die Integrität der Sex-Datenbank nicht beeinträchtigt. Dies bedeutet, dass die geschriebenen Daten vollständig allen voreingestellten Regeln entsprechen müssen, einschließlich der Genauigkeit und Verkettung der Daten, und die nachfolgende Datenbank die geplante Arbeit spontan abschließen kann
Isolationseigenschaften : Die Datenbank ermöglicht mehreren gleichzeitigen Transaktionen das gleichzeitige Lesen, Schreiben und Ändern ihrer Daten. Durch die Isolierung können Dateninkonsistenzen aufgrund von Kreuzausführungen verhindert werden, wenn mehrere Transaktionen gleichzeitig ausgeführt werden. Die Transaktionsisolation ist in verschiedene Ebenen unterteilt, darunter „Lesen nicht festgeschrieben“, „Lesen festgeschrieben“, „wiederholbares Lesen“ und „Serialisierbar“
Persistenz: Transaktionsverarbeitung Nach Abschluss erfolgt die Änderung an den Daten dauerhaft und geht auch bei einem Systemausfall nicht verloren
Unter der Standardeinstellung der MySQL-Befehlszeile werden Transaktionen automatisch übermittelt, also der COMMIT-Vorgang wird unmittelbar nach der Ausführung der SQL-Anweisung 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 Verwendung der automatischen Übermittlung des aktuellen Gemäldes zu deaktivieren
BEGIN oder START TRANSACTION; Explizit eine Transaktion starten
COMMIT; ARBEIT, beide gleichwertig. COMMIT schreibt die Transaktion fest und macht alle Änderungen an der Datenbank dauerhaft.
ROLLBACK; das Äquivalent ist auch ROLLBACK WORK. Rollback beendet die Transaktion des Benutzers und macht alle laufenden, nicht festgeschriebenen Änderungen rückgängig
SAVEPOINT-Kennung SAVEPOINT ermöglicht die Erstellung einer Speicherung innerhalb eines Transaktionspunkts, einer Transaktion kann mehrere SAVEPOINT-Bezeichner haben
RELESE SAVEPOINT-Kennung; Wenn es keinen angegebenen Speicherpunkt gibt, löst die Ausführung dieser Anweisung eine Ausnahme aus
ROLLBACK TO identifiziert;Rolle die Transaktion zum markierten Punkt zurück
SET TRANSACTION ; die Isolationsstufe der Transaktion. Die von der InnoDB-Speicher-Engine bereitgestellten Transaktionsisolationsstufen umfassen READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE
Verwenden Sie BEGIN, ROLLBACK, COMMIT zum Implementieren
BEGINStarten Sie eine Transaktion
ROLLBACKTransaktions-Rollback
COMMITTransaktionsbestätigung
Direct SET So ändern Sie den automatischen Übermittlungsmodus von MySQL:
SET AUTOCOMMIT=0 deaktiviert die automatische Übermittlung
SET AUTOCOMMIT=1 schaltet die automatische Übermittlung ein
Es besteht ein gewisser Grad an Isolation zwischen Transaktion A und Transaktion B
nicht festgeschrieben lesen
Auf dieser Isolationsstufe können alle Transaktionen die Ausführungsergebnisse anderer nicht festgeschriebener Transaktionen sehen. Diese Isolationsstufe wird in praktischen Anwendungen selten verwendet. Das Lesen nicht festgeschriebener Daten wird als schmutzige Daten bezeichnet
COMMIT lesen
Die Standardisolationsstufe für die meisten Datenbanksysteme (Aber nicht MySQL). Eine Transaktion kann nur Änderungen sehen, die von festgeschriebenen Transaktionen vorgenommen wurden. Es vermeidet Dirty Reads, aber es gibt immer noch Probleme mit nicht wiederholbaren Reads und Phantom Reads
wiederholbaren Reads
Die Standardebene von MySQL stellt sicher, dass mehrere Instanzen derselben Transaktion beim gleichzeitigen Lesen von Daten dieselben Datenzeilen sehen. Schmutzige Lesevorgänge und nicht wiederholbare Lesevorgänge werden vermieden, es tritt jedoch ein weiteres Problem auf: Phantom-Lesevorgänge. Phantomlesen bedeutet, 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 erneut liest, wird eine neue Phantomzeile gefunden. InnoDB- und Falcon-Speicher-Engines lösen dieses Problem durch den MVCC-Mechanismus (Multi-Version Concurrency Control)
Der MVCC-Mechanismus wird unter der Isolationsstufe wiederholbares Lesen und Auswählen verwendet Der Vorgang wird nicht aktualisiert. Die Versionsnummer ist ein Snapshot-Lesevorgang (historische Version). Durch Einfügen, Aktualisieren und Löschen wird die aktuelle Leseversion (aktuelle Version) aktualisiert
serialisierbar
Die höchste Isolationsstufe, indem Transaktionen so angeordnet werden müssen, dass sie nicht miteinander in Konflikt geraten können, wodurch das Phantomleseproblem gelöst wird. Kurz gesagt, es fügt jeder gelesenen Datenzeile eine gemeinsame Sperre hinzu. Auf dieser Ebene kann es zu einer großen Anzahl von Zeitüberschreitungen und Sperrkonflikten kommen
Einstellen die my.cnf-Datei
- READ-UNCOMMITTED - READ-COMMITED - REPEATABLE-READ - SERIALIZABLE * 例如 [mysqlId] transaction-isolation = READ-COMMITTED
Den Isolationsgrad dynamisch über Befehle festlegen
SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL <isolation-level> 其中isolation-level可以是: - READ UNCOMMITTED - READ COMMITTED - REPEATABLE READ - SERIALIZABLE GLOBAL|SESSION表示事务隔离级别的作用范围: GLOBAL:表示对所有会话有效 SESSION:表示对当前会话有效
Dirty Read: Transaktion A liest die von Transaktion B aktualisierten Daten, und dann macht B den Vorgang rückgängig, dann sind die von A gelesenen Daten Dirty Data
Nicht wiederholbares Lesen: Transaktion A liest dieselben Daten mehrmals, und Transaktion B aktualisiert die Daten, übermittelt sie jedoch nicht während der mehrfachen Lesevorgänge von Transaktion A. Infolgedessen liest Transaktion A dieselben Daten mehrmals und die Ergebnisse sind inkonsistent
Phantomlesung: Die Anzahl der vorher und nachher gelesenen Datenelemente ist inkonsistent. Dies liegt daran, dass Transaktion B während der mehrfachen Lesevorgänge von Transaktion A Einfüge- oder Löschvorgänge für die Tabelle ausführt
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in MySQL-Transaktionswissen (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!