SAVEPOINT für partielle Rollbacks verwenden
Bei langen Transaktionen möchten Sie möglicherweise nur einen Teil der Arbeit rückgängig machen, anstatt die gesamte Transaktion. SAVEPOINT ermöglicht es Ihnen, innerhalb einer Transaktion eine Markierung zu setzen, zu der Sie später zurückrollen können.
Beginnen wir eine neue Transaktion.
BEGIN;
Aktualisieren Sie zuerst den Saldo von ACC001, indem Sie ihn um 50 $ erhöhen.
UPDATE accounts SET balance = balance + 50.00 WHERE account_number = 'ACC001';
Erstellen Sie nun einen Savepoint. Dies dient als Lesezeichen für den aktuellen Zustand der Transaktion.
SAVEPOINT after_update;
Führen Sie als Nächstes eine weitere Operation durch: Fügen Sie ein neues Konto ACC004 ein.
INSERT INTO accounts (account_number, balance) VALUES ('ACC004', 300.00);
Nehmen wir an, die Einfügung von ACC004 war ein Fehler, aber die Aktualisierung von ACC001 war korrekt. Sie können zum Savepoint zurückrollen, um nur die INSERT-Anweisung rückgängig zu machen.
ROLLBACK TO after_update;
Dieser Befehl setzt die Transaktion auf den Zustand zurück, in dem sie sich befand, als Sie den Savepoint after_update erstellt haben. Die Einfügung von ACC004 wird rückgängig gemacht, aber die Aktualisierung von ACC001 bleibt bestehen.
Fragen Sie die Tabelle ab, um dies zu bestätigen. ACC004 sollte verschwunden sein, aber der Saldo von ACC001 sollte aktualisiert sein.
SELECT * FROM accounts;
Die Ausgabe sollte ACC001 mit einem Saldo von 950,00 $ und kein ACC004 anzeigen.
+----+----------------+---------+
| id | account_number | balance |
+----+----------------+---------+
| 1 | ACC001 | 950.00 |
| 2 | ACC002 | 600.00 |
+----+----------------+---------+
2 rows in set (0.00 sec)
Da Sie die Aktualisierung von ACC001 beibehalten möchten, können Sie nun den verbleibenden Teil der Transaktion bestätigen.
COMMIT;
Sie haben erfolgreich einen Savepoint verwendet, um ein partielles Rollback durchzuführen. Sie können die MySQL-Shell nun verlassen.
exit;