Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เกิดอะไรขึ้นเมื่อใช้ COMMIT ใน Stored Procedure และธุรกรรมหนึ่งล้มเหลว


สมมติว่าคำสั่งหนึ่งล้มเหลวหรือสร้างข้อผิดพลาด และอีกคำสั่งหนึ่ง (หรือหลายคำสั่ง) รันได้อย่างถูกต้อง MySQL ยังคง COMMIT การเปลี่ยนแปลงของคำสั่งที่รันได้อย่างถูกต้อง สามารถเข้าใจได้จากตัวอย่างต่อไปนี้ ซึ่งเราใช้ตาราง employee.tbl ที่มีข้อมูลดังนี้:

ตัวอย่าง

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)

ตอนนี้ เมื่อเราเรียกใช้ Procedure นี้ เรารู้ว่าคำสั่ง UPDATE จะสร้างข้อผิดพลาด เพราะเราไม่มี id = 10 ในตารางของเรา แต่คำสั่งแรกจะรันสำเร็จ ดังนั้น COMMIT จะบันทึกการเปลี่ยนแปลงลงในตาราง

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)