Eine Transaktion besteht aus einer oder mehreren SQL-Anweisungen als eine Einheit. Jede SQL-Anweisung in dieser Einheit ist voneinander abhängig und die Einheit als Ganzes ist unteilbar. Wenn eine Anweisung in der Einheit nicht erfolgreich abgeschlossen werden kann, wird die gesamte Einheit zurückgesetzt und alle betroffenen Daten werden in den Zustand vor Beginn der Transaktion zurückversetzt. Daher kann nur dann davon ausgegangen werden, dass die Transaktion erfolgreich ausgeführt wurde, wenn alle Anweisungen in der Transaktion erfolgreich ausgeführt wurden.
Vier Merkmale von Transaktionen:
Atomizität, jede Transaktion muss als unteilbare Einheit betrachtet werden.
Konsistenz, unabhängig davon, ob die Transaktion vollständig erfolgreich ist oder auf halbem Weg fehlschlägt, besteht Konsistenz, wenn die Transaktion das System in einen konsistenten Zustand versetzt.
Isolation: Jede Transaktion findet in ihrem eigenen Bereich statt, isoliert von anderen im System stattfindenden Transaktionen, und die Ergebnisse der Transaktion sind erst sichtbar, wenn sie vollständig ausgeführt ist.
Dauerhaftigkeit, selbst wenn das System abstürzt, bleibt eine festgeschriebene Transaktion bestehen.
Um eine Transaktion zu initialisieren und MySQL mitzuteilen, dass alle nachfolgenden SQL-Anweisungen als Einheit betrachtet werden müssen, stellt MySQL den Befehl „Starttransaktion“ bereit, um den Start einer Transaktion zu markieren. Sie können auch den Befehl begin oder begin work verwenden, um eine Transaktion zu initialisieren. Normalerweise folgen auf den Befehl zum Starten der Transaktion die SQL-Anweisungen, aus denen die Transaktion besteht.
Sobald die SQL-Anweisung ausgeführt wurde, können Sie den Commit-Befehl verwenden, um die gesamte Transaktion auf der Festplatte zu speichern, oder den Rollback-Befehl, um alle Änderungen rückgängig zu machen. Wenn die Transaktion Änderungen an Transaktionstabellen und Nicht-Transaktionstabellen umfasst, kann der Transaktionsverarbeitungsteil der Nicht-Transaktionstabellen nicht mit dem Rollback-Befehl rückgängig gemacht werden. In diesem Fall gibt MySQL einen Fehler zurück, der darauf hinweist, dass ein unvollständiges Rückgängigmachen erfolgt ist.
Der Commit-Befehl markiert das Ende des Transaktionsblocks.
MySQL bietet zwei Variablen zur Steuerung des Transaktionsverhaltens: Autocommit-Variable und Transaktionsisolationsstufenvariable.
Automatische Übermittlung. Sobald die SQL-Abfrage von MySQL ausgeführt wird, werden die Ergebnisse automatisch an die Datenbank übermittelt. Dieses Standardverhalten kann über die spezifische Autocommit-Variable geändert werden. Wenn autocommit=0 gesetzt ist, werden nachfolgende Tabellenaktualisierungen erst gespeichert, wenn explizit ein Commit-Befehl ausgegeben wird.
Transaktionsisolationsstufe, MySQL verwendet standardmäßig die wiederholbare Leseisolationsstufe, die mit set geändert werden kann.
Da es Datenbanken, die Transaktionen unterstützen, schwerer fällt, verschiedene Benutzer voneinander zu isolieren als nicht-transaktionale Datenbanken, spiegelt dies natürlich die Leistung des Systems wider.
Wir müssen etwas tun, um sicherzustellen, dass Transaktionen das System nicht übermäßig belasten.
Verwenden Sie kleine Transaktionen, zwei gängige Strategien:
1: Stellen Sie sicher, dass alle erforderlichen Benutzereingaben möglich sind, bevor Sie den Befehl zum Starten der Transaktion ausgeben.
2: Versuchen Sie, große Transaktionen in kleinere aufzuteilen. Anschließend werden Transaktionen ausgeführt separat.
Wählen Sie die geeignete Isolationsstufe, desto geringer ist die Leistung.
Vermeiden Sie Deadlocks in einer Transaktionsumgebung Tritt auf, wenn zwei oder mehr Clients in unterschiedlicher Reihenfolge dieselben Daten gleichzeitig aktualisieren möchten. Wir sollten einen Deadlock vermeiden.
Das obige ist der detaillierte Inhalt vonVertiefendes Verständnis des erweiterten MySQL-Driftings (5). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!