MySQL中是否允许嵌套事务?


Answers:


78

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

19
这不是问题,“保留点”是一回事,“嵌套事务”支持才是真正的问题。看到此链接
2012年

1
@arod:能否请您解释一下单线程上下文中的区别?谢谢!
Quassnoi 2012年

@Quassnoi我相信发给数据库的命令不同,不是吗?我可能会误会
引起了2012年

2
我提供的@Quassnoi链接是为了表明现在支持嵌套事务。现在,保存点功能强大,但是它们与嵌套的BEGIN,COMMIT / ROLLBACK(以编程方式来说,按命令来讲)并不相同,尽管您似乎可以肯定在“单线程上下文”中它们是等效的。我打算直接解决这个问题(3年后:)...
引发了2012年

12
@arod:您知道您提供的链接与MySQL无关,不是吗?
Quassnoi 2012年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.