MySQL允许嵌套事务吗?

110

MySQL允许使用嵌套事务吗?


6
MySQL不支持嵌套事务。 - hamedkh
2个回答

94

不行,但是

InnoDB 支持 SAVEPOINTS

你可以执行以下操作:

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

34
这不是问题的关键,"savepoints" 是一个事物,真正的问题是是否支持 "nested transaction"。请参考此链接 - arod
2
@arod:您能否在单线程上下文中解释一下区别吗?谢谢! - Quassnoi
2
@Quassnoi 我提供的链接是为了展示嵌套事务现在得到了支持。现在,保存点是很强大的,但它们与嵌套BEGIN、COMMIT/ROLLBACK并不相同(从程序上讲,命令方面),尽管你似乎非常确定在“单线程上下文”中它们是等价的。我打算直接回答这个问题(三年后 :) ... - arod
18
@arod:你知道你提供的链接与MySQL毫无关系,对吗? - Quassnoi
2
@arod 这个答案很好,唯一缺少的是一个“不过...”,如果你真的想完全满足问题。 - Sasino
显示剩余6条评论

61

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接