MySQL có cho phép sử dụng các giao dịch lồng nhau không?
Câu trả lời:
InnoDB
hỗ trợ SAVEPOINTS
.
Bạn có thể làm như sau:
CREATE TABLE t_test (id INT NOT NULL PRIMARY KEY) ENGINE=InnoDB;
START TRANSACTION;
INSERT
INTO t_test
VALUES (1);
SELECT *
FROM t_test;
id
---
1
SAVEPOINT tran2;
INSERT
INTO t_test
VALUES (2);
SELECT *
FROM t_test;
id
---
1
2
ROLLBACK TO tran2;
SELECT *
FROM t_test;
id
---
1
ROLLBACK;
SELECT *
FROM t_test;
id
---
Từ tài liệu MySQL:
Các giao dịch không thể được lồng vào nhau. Đây là hệ quả của cam kết ngầm được thực hiện cho bất kỳ giao dịch hiện tại nào khi bạn đưa ra câu lệnh BẮT ĐẦU GIAO DỊCH hoặc một trong các từ đồng nghĩa của nó. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html