Computer >> Máy Tính >  >> Lập trình >> MySQL

Điều gì xảy ra khi chúng ta sử dụng COMMIT trong thủ tục lưu trữ MySQL và một trong các giao dịch, trong giao dịch START, không thành công?


Giả sử một trong các truy vấn không thành công hoặc tạo ra lỗi và (các) truy vấn khác được thực thi đúng cách thì MySQL vẫn thực hiện các thay đổi của (các) truy vấn được thực thi đúng. Có thể hiểu điều này từ ví dụ sau, trong đó chúng ta đang sử dụng bảng ‘worker.tbl’ có dữ liệu sau -

Ví dụ

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Sohan   |
| 4  | Saurabh |
| 5  | Yash    |
+----+---------+
5 rows in set (0.00 sec)

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;
    -> COMMIT;
    -> END //
Query OK, 0 rows affected (0.00 sec)

Bây giờ, khi chúng ta gọi thủ tục này, chúng ta biết rằng truy vấn UPDATE sẽ tạo ra lỗi vì chúng ta không có id =10 trên bảng của mình. Nhưng vì truy vấn đầu tiên sẽ thực thi thành công nên COMMIT sẽ lưu các thay đổi vào bảng.

mysql> Delimiter ;
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   |
+----+---------+
6 rows in set (0.00 sec)