Die Konzepte und Merkmale von MySQL-Datenbanktransaktionen sowie die Syntax und der Prozess der Ausführung von Transaktionen in MySQL

Konzepte und Merkmale von Datenbanktransaktionen

Eine Datenbanktransaktion ist ein Mechanismus, eine Operationssequenz und umfasst eine Reihe von Datenbankoperationsbefehlen. Eine Transaktion sendet oder widerruft eine Vorgangsanforderung zusammen mit allen Befehlen als Ganzes an das System. Das heißt, dieser Satz von Datenbankbefehlen wird entweder ausgeführt oder nicht ausgeführt, sodass die Transaktion eine unteilbare logische Arbeitseinheit darstellt.

Bei gleichzeitigen Operationen auf einem Datenbanksystem werden Transaktionen als kleinste Steuereinheit verwendet, was sich besonders für Datenbanksysteme eignet, die von mehreren Benutzern gleichzeitig betrieben werden. Zum Beispiel Flugbuchungssysteme, Banken, Versicherungen und Wertpapierhandelssysteme.

Transaktionen weisen vier Merkmale auf, nämlich Atomizität, Konsistenz, Isolation und Haltbarkeit. Diese vier Merkmale werden üblicherweise als ACID bezeichnet.

1. Atomarität

Eine Transaktion ist ein vollständiger Vorgang. Die Elemente einer Transaktion sind unteilbar (atomar). Alle Elemente in der Transaktion müssen als Ganzes festgeschrieben oder zurückgesetzt werden. Wenn ein Element der Transaktion fehlschlägt, schlägt die gesamte Transaktion fehl.

Am Beispiel der Banküberweisung werden bei der Übermittlung der Transaktion die Daten der beiden Konten aktualisiert. Wenn die Transaktion aus irgendeinem Grund abgebrochen wird, bevor beide Konten erfolgreich aktualisiert wurden, werden die Salden beider Konten nicht aktualisiert, Änderungen an etwaigen Kontosalden werden rückgängig gemacht und die Transaktion kann nicht teilweise festgeschrieben werden.

2. Konsistenz

Wenn die Transaktion abgeschlossen ist, müssen die Daten in einem konsistenten Zustand sein. Das heißt, die in der Datenbank gespeicherten Daten befinden sich vor Beginn der Transaktion in einem konsistenten Zustand. Während einer laufenden Transaktion können sich die Daten in einem inkonsistenten Zustand befinden, beispielsweise können die Daten teilweise geändert werden. Wenn die Transaktion jedoch erfolgreich abgeschlossen wird, müssen die Daten wieder in einen bekannten konsistenten Zustand zurückversetzt werden. Änderungen an Daten durch Transaktionen können die Daten nicht beschädigen oder Transaktionen können den Datenspeicher nicht in einem instabilen Zustand hinterlassen.

Nehmen Sie als Beispiel die Banküberweisung. Vor Beginn der Transaktion befindet sich die Summe aller Kontostände in einem konsistenten Zustand. Im Verlauf der Transaktion verringert sich der Saldo des einen Kontos, während der Saldo des anderen Kontos nicht verändert wird. Daher ist die Summe aller Kontostände inkonsistent. Nach Abschluss der Transaktion wird der Gesamtkontostand wieder auf einen konsistenten Stand gebracht.

3. Isolation

Alle gleichzeitigen Transaktionen, die Daten ändern, sind voneinander isoliert, was bedeutet, dass Transaktionen unabhängig sein müssen und in keiner Weise von anderen Transaktionen abhängen oder diese beeinflussen sollten. Eine Transaktion, die Daten ändert, kann auf die Daten zugreifen, bevor eine andere Transaktion, die dieselben Daten verwendet, beginnt oder nachdem eine andere Transaktion, die dieselben Daten verwendet, endet.

Wenn außerdem eine Transaktion Daten ändert und gleichzeitig ein anderer Prozess dieselben Daten verwendet, werden die Änderungen an den Daten erst wirksam, wenn die Transaktion erfolgreich festgeschrieben wurde. Der Transfer zwischen Zhang San und Li Si und der Transfer zwischen Wang Wu und Zhao Er sind immer unabhängig voneinander.

4. Haltbarkeit

Transaktionsdauerhaftigkeit bedeutet, dass die Ergebnisse der Transaktionsverarbeitung unabhängig davon, ob das System ausfällt, dauerhaft sind.

Nachdem eine Transaktion erfolgreich abgeschlossen wurde, sind die Änderungen, die sie an der Datenbank vornimmt, dauerhaft, auch wenn das System ausfällt. Das heißt, sobald die Transaktion festgeschrieben ist, werden alle durch die Transaktion an den Daten vorgenommenen Änderungen dauerhaft in der Datenbank gespeichert.

Das ACID-Prinzip von Transaktionen stellt sicher, dass eine Transaktion entweder erfolgreich festgeschrieben wird oder fehlschlägt und zurückgesetzt wird, oder eines von beiden. Daher sind seine Änderungen an der Transaktion wiederherstellbar. Das heißt, wenn eine Transaktion fehlschlägt, werden die Datenänderungen auf den Zustand vor der Ausführung der Transaktion zurückgesetzt.

Syntax und Prozess der MySQL-Transaktionsausführung

MySQL bietet mehrere Speicher-Engines zur Unterstützung von Transaktionen. Zu den Speicher-Engines, die Transaktionen unterstützen, gehören InnoDB und BDB. InnoDB-Speicher-Engine-Transaktionen werden hauptsächlich durch UNDO-Protokolle und REDO-Protokolle implementiert. Die MyISAM-Speicher-Engine unterstützt keine Transaktionen.

Erweiterung: Jede Art von Datenbank verfügt über verschiedene Protokolle, um den Betriebsstatus, den täglichen Betrieb, Fehlermeldungen usw. der Datenbank aufzuzeichnen, und MySQL bildet da keine Ausnahme. Wenn sich beispielsweise der Benutzer root beim MySQL-Server anmeldet, werden die Anmeldezeit des Benutzers, die Ausführungsvorgänge usw. in der Protokolldatei aufgezeichnet.

Um den MySQL-Server zu warten, ist es häufig notwendig, Protokollvorgänge in der MySQL-Datenbank durchzuführen:

  • UNDO-Protokoll: Kopiert die Daten, bevor die Transaktion ausgeführt wird, und wird zum Zurücksetzen der Daten verwendet, wenn eine Ausnahme in der Transaktion 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 geleert.

Grundkenntnisse der MySQL-Datenbank, vollständige Übung icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Unter den Standardeinstellungen ist jede SQL-Anweisung eine Transaktion, d. h. sie wird nach der Ausführung der SQL-Anweisung automatisch übermittelt. Um mehrere Vorgänge als Ganzes zu kombinieren, müssen Sie mit BEGIN oder START TRANSACTION eine Transaktion starten oder die automatische Übermittlung der aktuellen Sitzung deaktivieren.

Informationen zur automatischen Übermittlung von Transaktionen finden Sie im Abschnitt  „ MySQL-Einstellung der automatischen Transaktionsübermittlung “.

Syntax und Prozess zur Ausführung von Transaktionen

SQL verwendet die folgenden Anweisungen zum Verwalten von Transaktionen.

1) Transaktion starten
BEGIN;

 oder

START TRANSACTION;

Diese Anweisung markiert explizit den Startpunkt einer Transaktion.

2) Transaktion abschicken

MySQL verwendet die folgende Anweisung, um eine Transaktion festzuschreiben:

COMMIT;

COMMIT bedeutet, eine Transaktion festzuschreiben, dh alle Vorgänge der Transaktion festzuschreiben. Insbesondere werden alle Aktualisierungen der Datenbank in der Transaktion in die physische Datenbank auf der Festplatte geschrieben und die Transaktion endet normal.

Das Festschreiben einer Transaktion bedeutet, dass alle seit Beginn der Transaktion ausgeführten Daten geändert werden und ein dauerhafter Teil der Datenbank werden und somit auch das Ende einer Transaktion markieren. Sobald dieser Befehl ausgeführt wird, kann die Transaktion nicht mehr zurückgesetzt werden. Dieser Vorgang wird nur ausgeführt, wenn alle Änderungen zum Übertragen in die Datenbank bereit sind.

3) Transaktion zurücksetzen (rückgängig machen).

MySQL setzt die Transaktion mit der folgenden Anweisung zurück:

ROLLBACK;

ROLLBACK bedeutet, die Transaktion abzubrechen. Das heißt, während der Ausführung der Transaktion tritt ein Fehler auf und die Transaktion kann nicht weiter ausgeführt werden. Das System macht alle abgeschlossenen Vorgänge in der Datenbank in der Transaktion rückgängig und führt einen Rollback auf den Anfangsstatus durch der Transaktion. Der Vorgang bezieht sich hier auf den Aktualisierungsvorgang für die Datenbank.

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

Zusammenfassen

Die Aktualisierungsvorgänge der Datenbankdaten durch die SQL-Anweisungen nach der BEGIN- oder START TRANSACTION-Anweisung werden im Transaktionsprotokoll aufgezeichnet, bis die ROLLBACK-Anweisung oder COMMIT-Anweisung auftritt. Wenn ein Vorgang in der Transaktion fehlschlägt und eine ROLLBACK-Anweisung ausgeführt wird, können alle aktualisierten Daten nach dem Öffnen der Transaktionsanweisung auf den Zustand vor Beginn der Transaktion zurückgesetzt werden. Wenn alle Vorgänge in der Transaktion korrekt abgeschlossen werden und die COMMIT-Anweisung verwendet wird, um aktualisierte Daten an die Datenbank zu senden, befinden sich die Daten zu diesem Zeitpunkt in einem neuen konsistenten Zustand.

Beispieldemonstration

Nachfolgend finden Sie zwei Beispiele zur Veranschaulichung der spezifischen Verwendung von MySQL-Transaktionen.

Beispiel 1

Im Folgenden wird das Szenario simuliert, in dem andere Sitzungen auf die Datentabelle zugreifen, nachdem das Konto von Zhang San um 500 Yuan gesunken ist, das Konto von Li Si jedoch nicht um 500 Yuan gestiegen ist. Da der Code zur besseren Lesbarkeit in zwei Fenstern ausgeführt werden muss, nennen wir sie hier A-Fenster und B-Fenster.

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

mysql> USE mybank;
Database changed
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE bank SET currentMoney = currentMoney-500
    -> WHERE customerName='张三';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0

2) Fragen Sie die Daten in der Bankdatentabelle in Fenster B ab. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |      1000.00 |
| 李四         |         1.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Aus den Ergebnissen ist ersichtlich, dass die Daten in der Banktabelle zwar durch die Transaktion in Fenster A geändert wurden, die Daten jedoch nicht sofort aktualisiert werden. Zu diesem Zeitpunkt lesen andere Sitzungen die Daten noch vor der Aktualisierung.

3) Fahren Sie mit der Ausführung der Transaktion in Fenster A fort und senden Sie die Transaktion. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

mysql> UPDATE bank SET currentMoney = currentMoney+500
    -> WHERE customerName='李四';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.07 sec)

4) Fragen Sie die Daten der Bankdatentabelle erneut in Fenster B ab. Die SQL-Anweisung und die laufenden Ergebnisse lauten wie folgt:

mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Nach der Ausführung von COMMIT zum Festschreiben der Transaktion in Fenster A werden die Aktualisierungen der Daten zusammen übermittelt und andere Sitzungen lesen die aktualisierten Daten. Aus den Ergebnissen ist ersichtlich, dass der Gesamtkontostand von Zhang San und Li Si mit dem vor der Übertragung übereinstimmt, sodass die Daten von einem Konsistenzstatus in einen anderen aktualisiert werden.

Wie bereits erwähnt, können Sie, wenn während der Transaktionsausführung ein Problem auftritt, das heißt, wenn eine vollständige Transaktion nicht gemäß dem normalen Prozess ausgeführt werden kann, die ROLLBACK-Anweisung verwenden, um ein Rollback durchzuführen und die Daten zum Wiederherstellen des Ausgangszustands zu verwenden.

In Beispiel 1 wurde der Kontostand von Zhang San auf 500 Yuan reduziert. Wenn weitere 1.000 Yuan überwiesen werden, ist der Saldo negativ und muss auf den ursprünglichen Stand zurückgesetzt werden. Wie in Beispiel 2 gezeigt.

Beispiel 2

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

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
 
mysql> UPDATE bank SET currentMoney = currentMoney-1000 WHERE customerName='张三';
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
mysql> ROLLBACK;
Query OK, 0 rows affected (0.07 sec)
 
mysql> SELECT * FROM mybank.bank;
+--------------+--------------+
| customerName | currentMoney |
+--------------+--------------+
| 张三         |       500.00 |
| 李四         |       501.00 |
+--------------+--------------+
2 rows in set (0.00 sec)

Aus den Ergebnissen ist ersichtlich, dass nach der Ausführung des Transaktions-Rollbacks die Kontodaten in den Ausgangszustand zurückversetzt werden, also in den Zustand vor Ausführung der Transaktion.

expandieren

Um bei Datenbankoperationen die Richtigkeit gleichzeitig gelesener Daten effektiv sicherzustellen, wird die Isolationsstufe von Transaktionen vorgeschlagen. In den Demonstrationen von Beispiel 1 und Beispiel 2 ist die Isolationsstufe der Transaktion die Standardisolationsstufe. In MySQL ist die Standardisolationsstufe einer Transaktion die Isolationsstufe REPEATABLE-READ (wieder lesbar). Wenn die Transaktion nicht beendet wird (COMMIT oder ROLLBACK wird nicht ausgeführt), können andere Sitzungen nur nicht festgeschriebene Daten lesen.

Klicken Sie bitte auf MySQL-Transaktionsisolationsstufen, um mehr zu erfahren.

Vorsichtsmaßnahmen

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

1) Halten Sie die Transaktionen so kurz wie möglich

Vom Beginn bis zum Ende einer Transaktion wird im Datenbankverwaltungssystem eine große Menge an Ressourcen reserviert, um die Atomizität, Konsistenz, Isolation und Dauerhaftigkeit der Transaktion sicherzustellen. Wenn in einem Mehrbenutzersystem große Transaktionen große Mengen an Systemressourcen beanspruchen, wird das System überlastet, die Laufleistung der Software wird beeinträchtigt und es kann sogar zum Absturz des Systems kommen.

2) Die Datenmenge, auf die bei der Transaktion zugegriffen wird, sollte minimiert werden.

Wenn Transaktionen gleichzeitig ausgeführt werden, gilt: Je kleiner die Datenmenge, mit der die Transaktion arbeitet, desto weniger Vorgänge mit denselben Daten zwischen Transaktionen.

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

Durch das Durchsuchen und Abfragen von Daten werden die Daten in der Datenbank nicht aktualisiert. Sie sollten daher versuchen, keine Transaktionen zum Abfragen von Daten zu verwenden, um eine übermäßige Beanspruchung der Systemressourcen zu vermeiden.

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

Wenn Sie während der Transaktionsverarbeitung darauf warten müssen, dass der Benutzer Daten eingibt, belegt die Transaktion lange Zeit Ressourcen und kann zu einer Überlastung des Systems führen.

Dachang Senior Database Engineer MySQL-Datenbank-Praktikum icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021 

Ich denke du magst

Origin blog.csdn.net/m0_37449634/article/details/135554108
Empfohlen
Rangfolge