Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thực hiện ROLLBACK transaction trong MySQL stored procedure

ROLLBACK hoàn tác thay đổi sau khi transaction bắt đầu. Trong stored procedure, phải khai báo handler EXIT cho sqlexception hoặc sqlwarning.

Ví dụ với bảng gg (cột Name NOT NULL):

mysql> SHOW CREATE TABLE gg\G
... PRIMARY KEY (`Id`) ) ENGINE=InnoDB ...

mysql> SELECT * FROM employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
| 6  | Rahul   |
+----+---------+

Thủ tục có ROLLBACK:

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();  -- lỗi: NULL vào NOT NULL
    -> UPDATE employee.tbl SET name='YashPal' WHERE id=5;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.02 sec)

Gọi thủ tục:

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    |   -- không đổi thành YashPal
| 6  | Rahul   |
+----+---------+

INSERT lỗi (NULL) → handler kích hoạt ROLLBACK → UPDATE cũng bị hoàn tác.