Detaillierte Erklärung der Syntax und des Prozesses der Ausführung von MySQL-Transaktionen

Detaillierte Erklärung der Syntax und des Prozesses der Ausführung von MySQL-Transaktionen

Zusammenfassung: MySQL bietet eine Vielzahl von Speicher-Engines zur Unterstützung von Transaktionen.

MySQL bietet eine Vielzahl von Speicher-Engines zur Unterstützung von Transaktionen. Die Speicher-Engines, die Transaktionen unterstützen, sind InnoDB und BDB. Transaktionen der InnoDB-Speicher-Engine werden hauptsächlich über UNDO-Protokolle und REDO-Protokolle implementiert, während die MyISAM-Speicher-Engine keine Transaktionen unterstützt.

Erweiterung: Jede Datenbank verfügt über verschiedene Protokolle, um den Betriebsstatus der Datenbank, tägliche Vorgänge, Fehlermeldungen usw. aufzuzeichnen. MySQL ist keine Ausnahme. Wenn sich beispielsweise der Benutzer „root“ beim MySQL-Server anmeldet, werden die Anmeldezeit des Benutzers, Ausführungsvorgänge usw. in der Protokolldatei aufgezeichnet.

Zur Wartung des MySQL-Servers ist es häufig notwendig, Log-Operationen in der MySQL-Datenbank durchzuführen:

UNDO-Protokoll: kopiert die Daten vor der Ausführung der Transaktion und wird zum Zurücksetzen der Daten verwendet, wenn bei der Transaktion eine Ausnahme auftritt. REDO-Protokoll: zeichnet jeden Vorgang auf, der Daten während der Transaktionsausführung aktualisiert. Wenn die Transaktion festgeschrieben wird, wird der Inhalt auf die Festplatte geschrieben.

Standardmäßig ist jede SQL-Anweisung eine Transaktion, was bedeutet, dass sie nach der Ausführung der SQL-Anweisung automatisch festgeschrieben wird. Um mehrere Vorgänge als Ganzes zu behandeln, müssen Sie BEGIN oder START TRANSACTION verwenden, um eine Transaktion zu starten, oder die automatische Übermittlung der aktuellen Sitzung deaktivieren.

Syntax und Ablauf der Transaktionsausführung

SQL verwendet die folgenden Anweisungen zum Verwalten von Transaktionen.

1) Starten Sie eine Transaktion

BEGINNEN;

oder

TRANSAKTION STARTEN;

Diese Anweisung markiert explizit den Startpunkt einer Transaktion.

2) Transaktion durchführen

MySQL verwendet die folgende Anweisung, um eine Transaktion festzuschreiben:

BEGEHEN;

COMMIT bedeutet das Festschreiben einer Transaktion, also das Festschreiben aller Vorgänge einer Transaktion. Insbesondere werden alle Datenbankaktualisierungen in der Transaktion in die physische Datenbank auf der Festplatte geschrieben und die Transaktion wird normal beendet.

Das Festschreiben einer Transaktion bedeutet, dass alle seit Beginn der Transaktion ausgeführten Daten geändert werden und ein dauerhafter Teil der Datenbank werden. Dies markiert somit das Ende einer Transaktion. Sobald dieser Befehl ausgeführt wurde, kann die Transaktion nicht mehr rückgängig gemacht werden. Dieser Vorgang wird nur ausgeführt, wenn alle Änderungen zur Übernahme in die Datenbank bereit sind.

3) Eine Transaktion rückgängig machen

MySQL führt ein Rollback einer Transaktion mit der folgenden Anweisung durch:

ROLLBACK;

ROLLBACK bedeutet das Abbrechen einer Transaktion. Das heißt, wenn während der Ausführung einer Transaktion ein Fehler auftritt und die Transaktion nicht fortgesetzt werden kann, bricht das System alle abgeschlossenen Vorgänge in der Datenbank in der Transaktion ab und kehrt zum Status zu Beginn der Transaktion zurück. Mit dem Vorgang ist hier der Aktualisierungsvorgang für die Datenbank gemeint.

Wenn während der Transaktionsausführung ein Fehler auftritt, verwenden Sie die ROLLBACK-Anweisung, um die Transaktion auf den Startpunkt oder einen angegebenen Haltepunkt zurückzusetzen. Gleichzeitig löscht das System alle seit Beginn der Transaktion oder bis zu einem bestimmten Speicherpunkt vorgenommenen Datenänderungen und gibt die von der Transaktion kontrollierten Ressourcen frei. Daher markiert diese Erklärung gleichzeitig das Ende der Transaktion.

Zusammenfassen

Die auf die BEGIN- oder START TRANSACTION-Anweisung folgenden SQL-Anweisungen, die die Datenbankdaten aktualisieren, werden im Transaktionsprotokoll aufgezeichnet, bis eine ROLLBACK-Anweisung oder eine COMMIT-Anweisung auftritt. Wenn ein Vorgang in einer Transaktion fehlschlägt und die ROLLBACK-Anweisung ausgeführt wird, können alle aktualisierten Daten nach dem Öffnen der Transaktionsanweisung auf den Zustand vor dem Start der Transaktion zurückgesetzt werden. Wenn alle Vorgänge in der Transaktion korrekt abgeschlossen wurden und die aktualisierten Daten mit der COMMIT-Anweisung an die Datenbank übermittelt werden, befinden sich die Daten nun in einem neuen konsistenten Zustand.

Beispieldemonstration

Die folgenden zwei Beispiele demonstrieren die spezifische Verwendung von MySQL-Transaktionen.

Beispiel

Die folgende Simulation zeigt, dass, nachdem Zhang Sans Konto um 500 Yuan reduziert wurde, Li Sis Konto jedoch noch nicht um 500 Yuan erhöht wurde, andere Sitzungen auf die Datentabelle zugreifen. Da der Code in zwei Fenstern ausgeführt werden muss, nennen wir sie der einfacheren Lesbarkeit halber Fenster A und Fenster B.

Öffnen Sie eine Transaktion in Fenster A und aktualisieren Sie die Daten in der Banktabelle in der Mybank-Datenbank. Die SQL-Anweisungen und laufenden Ergebnisse lauten wie folgt:

Im Fenster B werden die Daten der Bankdatentabelle abgefragt. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

Aus den Ergebnissen können wir ersehen, dass die Transaktion in Fenster A zwar die Daten in der Banktabelle geändert hat, die Daten jedoch nicht sofort aktualisiert werden. Zu diesem Zeitpunkt lesen andere Sitzungen die Daten noch vor der Aktualisierung.

Führen Sie die Transaktion in Fenster A weiter aus und bestätigen Sie die Transaktion. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

Im Fenster B werden die Daten der Banktabelle erneut abgefragt. Das SQL-Statement und das laufende Ergebnis lauten wie folgt:

Nachdem Sie COMMIT in Fenster A ausgeführt haben, um die Transaktion festzuschreiben, werden die an den Daten vorgenommenen Aktualisierungen gemeinsam festgeschrieben und andere Sitzungen lesen die aktualisierten Daten. Aus den Ergebnissen können wir ersehen, dass der Gesamtkontostand von Zhang San und Li Si mit dem vor der Übertragung übereinstimmt, sodass die Daten von einem konsistenten Zustand in einen anderen konsistenten Zustand aktualisiert werden.

Wenn, wie bereits erwähnt, bei der Ausführung einer Transaktion Probleme auftreten, das heißt, eine vollständige Transaktion nicht gemäß dem normalen Ablauf ausgeführt werden kann, können Sie mit der ROLLBACK-Anweisung ein Rollback durchführen und die Daten in ihren ursprünglichen Zustand zurückversetzen.

In Beispiel 1 ist Zhang Sans Kontostand auf 500 Yuan gesunken. Wenn er weitere 1.000 Yuan überweist, ist der Kontostand negativ und er muss ihn auf den ursprünglichen Stand zurücksetzen. Wie in Beispiel 2 gezeigt.

Beispiel

Reduzieren Sie Zhang Sans Kontostand um 1.000 Yuan und setzen Sie die Transaktion zurück. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

Aus den Ergebnissen können wir ersehen, dass nach der Ausführung des Transaktions-Rollbacks die Kontodaten in den ursprünglichen Zustand zurückversetzt werden, also in den Zustand vor der Ausführung der Transaktion.

expandieren

Um bei Datenbankoperationen die Richtigkeit des gleichzeitigen Datenlesens effektiv sicherzustellen, werden Transaktionsisolationsebenen vorgeschlagen. In den Demonstrationen der Beispiele 1 und 2 ist die Transaktionsisolationsebene die Standardisolationsebene. In MySQL ist die Standardtransaktionsisolationsstufe REPEATABLE-READ. Dies bedeutet, dass andere Sitzungen nur nicht festgeschriebene Daten lesen können, wenn die Transaktion nicht abgeschlossen ist (COMMIT oder ROLLBACK nicht ausgeführt wird).

Vorsichtsmaßnahmen

MySQL-Transaktionen sind eine sehr ressourcenintensive Funktion. Bitte beachten Sie bei der Verwendung die folgenden Punkte.

1) Halten Sie Transaktionen so kurz wie möglich

Vom Beginn bis zum Ende einer Transaktion wird eine große Menge an Ressourcen im Datenbankverwaltungssystem reserviert, um die Atomizität, Konsistenz, Isolation und Dauerhaftigkeit der Transaktion sicherzustellen. In einem Mehrbenutzersystem beanspruchen größere Transaktionen viele Systemressourcen und überlasten das System, was die Betriebsleistung der Software beeinträchtigt und sogar zu Systemabstürzen führen kann.

2) Minimieren Sie die Datenmenge, auf die bei einer Transaktion zugegriffen wird

Bei der gleichzeitigen Ausführung von Transaktionen gilt: Je kleiner die von den Transaktionen verarbeitete Datenmenge ist, desto weniger Operationen an denselben Daten zwischen den Transaktionen sind nötig.

3) Versuchen Sie, beim Abfragen von Daten keine Transaktionen zu verwenden

Durch das Durchsuchen und Abfragen von Daten werden die Datenbankdaten nicht aktualisiert. Sie sollten daher möglichst keine Transaktionen zum Abfragen von Daten verwenden, um eine übermäßige Belegung der Systemressourcen zu vermeiden.

4) Versuchen Sie, während der Transaktionsverarbeitung nicht auf Benutzereingaben zu warten

Wenn Sie bei der Transaktionsabwicklung darauf warten müssen, dass der Benutzer Daten eingibt, beansprucht die Transaktion lange Ressourcen und kann zu einer Systemblockierung führen.

Dieser Artikel wird von der Huawei Cloud Community „MySQL-Transaktionssyntax und -prozess“ geteilt, der ursprüngliche Autor ist: Lucky Boy.

Zusammenfassen

Dies ist das Ende dieses Artikels über die Syntax und den Prozess der MySQL-Transaktionsausführung. Weitere relevante MySQL-Transaktionsinhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Ausführliche Erläuterung der Konzepte und Verwendung von MySQL-Transaktionen
  • Umfassendes Verständnis von Transaktionen in MySQL
  • Tiefgreifendes Verständnis des Transaktionsmechanismus in MySQL
  • Beispiel-Tutorial für MySQL-Datenbanktransaktionen

<<:  So aktivieren Sie die Swoole Loader-Erweiterung auf dem virtuellen Host des Linux-Systems

>>:  Tutorial zu HTML-Tabellen-Tags (36): Hintergrundfarbattribut für Tabellenkopfzeilen BGCOLOR

Artikel empfehlen

So deinstallieren Sie MySQL 8.0 unter Linux

1. MySQL herunterfahren [root@localhost /]# Diens...

So legen Sie Verknüpfungssymbole in Linux fest

Vorwort Durch das Erstellen von Verknüpfungen in ...

Zehn Erfahrungen bei der Präsentation chinesischer Webinhalte

<br /> Ich habe mich auf die drei Aspekte Te...

Häufige Ursachen und Lösungen für langsame MySQL-SQL-Anweisungen

1. Langsame Abfrage aufgrund fehlenden oder ungül...

Verwenden des radialen Farbverlaufs in CSS zum Erzielen eines Karteneffekts

Vor einigen Tagen erhielt eine Kollegin ein Punkt...

So extrahieren Sie Zeichenfolgenelemente aus nicht festen Positionen in MySQL

Vorwort Hinweis: Die Testdatenbankversion ist MyS...

Schreiben eines Schere-Stein-Papier-Spiels in JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Erste Schritte mit SELinux

Bereits zu Kernel 2.6-Zeiten wurde ein neues Sich...

MySQL-Datenbank implementiert OLTP-Benchmark-Test basierend auf Sysbench

Sysbench ist ein hervorragendes Benchmark-Tool, d...