Wir wissen, dass ROLLBACK alle nach Beginn der Transaktion an der Datenbank vorgenommenen Änderungen rückgängig macht. Um ROLLBACK innerhalb einer gespeicherten MySQL-Prozedur auszuführen, müssen wir den EXIT-Handler deklarieren. Wir können Handler für sqlException oder SQL-Warnungen verwenden. Dies kann anhand eines Beispiels verstanden werden, in dem eine gespeicherte ROLLBACK-Prozedur für eine Tabelle mit den folgenden Details erstellt wird:
mysql> SHOW CREATE table gg\G *************************** 1. row *************************** Table: gg Create Table: CREATE TABLE `gg` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(30) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
Wir können sehen, dass die Spalte „Name“ keinen NULL-Wert haben darf und die Tabelle die folgenden Daten enthält:
mysql> Select * from employee.tbl; +----+---------+ | Id | Name | +----+---------+ | 1 | Mohan | | 2 | Gaurav | | 3 | Sohan | | 4 | Saurabh | | 5 | Yash | | 6 | Rahul | +----+---------+ 6 rows in set (0.00 sec)
mysql> Delimiter // mysql> Create Procedure st_transaction_Rollback() -> BEGIN -> DECLARE exit handler for sqlexception -> BEGIN -> ROLLBACK; -> END; -> DECLARE exit handler for sqlwarning -> BEGIN -> ROLLBACK; -> END; -> START TRANSACTION; -> INSERT INTO employee.tbl(name) values(); -> UPDATE employee.tbl set name = 'YashPal' where id = 5; -> COMMIT; -> END // Query OK, 0 rows affected (0.02 sec) mysql> Delimiter ; mysql> CALL st_transaction_Rollback () Query OK, 0 rows affected (0.00 sec) mysql> Select * from employee.tbl; +----+---------+ | Id | Name | +----+---------+ | 1 | Mohan | | 2 | Gaurav | | 3 | Sohan | | 4 | Saurabh | | 5 | Yash | | 6 | Rahul | +----+---------+ 6 rows in set (0.00 sec)
Aus der obigen Ergebnismenge können wir erkennen, dass die durch die UPDATE-Anweisung vorgenommenen Änderungen ROLLBACKED wurden, da die erste Abfrage von INSERT einen Fehler auslöste (versucht, einen NULL-Wert einzufügen).
Das obige ist der detaillierte Inhalt vonWie können wir eine ROLLBACK-Transaktion in einer gespeicherten MySQL-Prozedur durchführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!