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