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

การใช้ Nested Transactions ใน MySQL ด้วย SAVEPOINT


MySQL ไม่รองรับ Nested Transactions โดยตรง (ไม่สามารถ START TRANSACTION ซ้อนกันได้) แต่ใช้ SAVEPOINT เพื่อทำ Savepoint ภายใน Transaction เดียวกัน แล้ว ROLLBACK TO SAVEPOINT ได้

ตัวอย่าง:

mysql> CREATE TABLE transactionDemo ( id INT AUTO_INCREMENT PRIMARY KEY ); Query OK
mysql> START TRANSACTION; Query OK
mysql> INSERT INTO transactionDemo VALUES ();  -- id=1
mysql> SELECT * FROM transactionDemo;  -- 1 row
mysql> SAVEPOINT t2;
mysql> INSERT INTO transactionDemo VALUES ();  -- id=2
mysql> SELECT * FROM transactionDemo;  -- 2 rows
mysql> ROLLBACK TO t2;  -- ย้อนกลับไปที่ savepoint t2
mysql> SELECT * FROM transactionDemo;  -- กลับเหลือ 1 row (id=1)

ข้อจำกัด:

  • SAVEPOINT ทำงานภายใน Transaction เดียว ไม่ใช่ Nested Transaction จริง
  • ไม่สามารถ COMMIT SAVEPOINT แยกต่างหากได้ (ต้อง COMMIT ทั้ง Transaction)
  • RELEASE SAVEPOINT ชื่อ_savepoint - ลบ savepoint