MySQL không hỗ trợ transaction lồng nhau trực tiếp, nhưng có thể mô phỏng bằng SAVEPOINT.
Các bước:
- Tạo bảng.
- Bắt đầu transaction:
START TRANSACTION. - Chèn bản ghi.
- Tạo savepoint:
SAVEPOINT tên_savepoint. - Thực hiện các thao tác khác.
- Rollback về savepoint nếu cần:
ROLLBACK TO tên_savepoint.
Ví dụ:
mysql> CREATE TABLE NestedTransactionDemo (Name VARCHAR(200));
mysql> START TRANSACTION;
mysql> INSERT INTO NestedTransactionDemo VALUES('John');
mysql> SAVEPOINT transaction2;
mysql> INSERT INTO NestedTransactionDemo VALUES('David');
mysql> SELECT * FROM NestedTransactionDemo; -- 2 dòng
mysql> ROLLBACK TO transaction2;
mysql> SELECT * FROM NestedTransactionDemo; -- chỉ còn John
Lưu ý: SAVEPOINT cho phép quay lại trạng thái trung gian mà không hủy toàn bộ transaction.