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

COMMIT trong stored procedure MySQL khi một transaction thất bại

Nếu một truy vấn lỗi nhưng truy vấn khác thành công, MySQL vẫn COMMIT các thay đổi của truy vấn thành công (trừ khi có handler ROLLBACK).

Ví dụ với bảng employee.tbl:

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

Thủ tục có COMMIT không handler:

mysql> DELIMITER //
mysql> CREATE PROCEDURE st_transaction_commit_save()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) VALUES('Rahul');
    -> UPDATE employee.tbl SET name='Gurdas' WHERE id=10;  -- lỗi: id=10 không tồn tại
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.00 sec)

Gọi thủ tục:

mysql> CALL st_transaction_commit_save();
Query OK, 0 rows affected (0.07 sec)
mysql> SELECT * FROM employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
| 6  | Rahul   |   -- INSERT thành công được COMMIT
+----+---------+

UPDATE lỗi nhưng INSERT đã COMMIT. Cần handler để ROLLBACK toàn bộ.