MySQL 中允许嵌套事务吗?

MySQL 允许使用嵌套事务吗?

48546 次浏览

No, but

InnoDB supports SAVEPOINTS.

You can do the following:

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
---

From MySQL documentation:

Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms. https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html