แนวคิด Nested Transactions ใน MySQL
MySQL ไร้รองรับ Nested Transactions โดยตรง แต่สามารถจำลองได้ด้วย SAVEPOINT ซึ่งช่วยให้สามารถย้อนกลับไปยังจุดหนึ่งภายใน Transaction ได้
ตัวอย่างขั้นตอนการใช้งาน
1. สร้างตาราง
mysql> create table NestedTransactionDemo (
-> Name varchar(200)
-> );
Query OK, 0 rows affected (0.63 sec)
2. เริ่ม Transaction
mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec)
3. เพิ่มข้อมูลแรก
mysql> insert into NestedTransactionDemo values('John');
Query OK, 1 row affected (0.04 sec)
4. สร้าง SAVEPOINT
mysql> savepoint transaction2; Query OK, 0 rows affected (0.00 sec)
5. เพิ่มข้อมูลที่สอง (ระดับ nested)
mysql> insert into NestedTransactionDemo values('David');
Query OK, 1 row affected (0.00 sec)
6. ตรวจสอบข้อมูล
mysql> select * from NestedTransactionDemo;
+-------+ | Name | +-------+ | John | | David | +-------+ 2 rows in set (0.00 sec)
7. ย้อนกลับไปที่ SAVEPOINT
mysql> rollback to transaction2; Query OK, 0 rows affected (0.00 sec)
8. ตรวจสอบอีกครั้ง
mysql> select * from NestedTransactionDemo;
+------+ | Name | +------+ | John | +------+ 1 row in set (0.00 sec)
ข้อมูล 'David' ถูกลบออก แสดงว่า ROLLBACK TO SAVEPOINT ทำงานได้อย่างถูกต้อง