MySQL是否允许使用嵌套事务?MySQL中允许嵌套事务吗?
69
A
回答
59
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
---
0
如果您使用PHP,那么你可以是有趣的https://github.com/Enelar/phpsql 它支持MySQL和pgsql的,并可延伸到其它连接器。
function TransferMoney()
{ // Nested transaction code could not even know that he nested
$trans3 = db::Begin();
if (!db::Query("--Withdraw money from user", [$uid, $amount], true))
return $trans3->Rollback();
db::Query("--Deposit money to system");
return $trans3->Commit();
}
$trans = db::Begin();
db::Query("--Give item to user inventory");
$trans2 = $trans->Begin();
$trans2->Query("--Try some actions and then decide to rollback");
$trans2->Rollback();
// Commit or rollback depending on money transfer result
return $trans->Finish(TransferMoney());
14
从
MySQL文档:
事务不能被嵌套。当您发出START TRANSACTION语句或其同义词之一时,这是对任何当前事务执行的隐式提交的结果。 https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html
相关问题
- 1. 嵌套逻辑&&运算符允许吗?
- 2. .net如何通过TransactionScopeOption允许嵌套事务
- 3. java.lang.IllegalStateException:不允许嵌套事务。每次的BeginTransaction()
- 4. 嵌套服务器控件允许嵌套的HTML
- 5. 不允许嵌套SQLCommand?
- 6. 嵌套静态类中不允许使用扩展方法吗?
- 7. NHibernate,MySQL,InnoDB和嵌套事务
- 8. 是否允许将服务嵌套到应用程序中?
- 9. ADO.NET中的嵌套事务
- 10. Neo4j中的嵌套事务
- 11. TSQL中的嵌套事务
- 12. 春嵌套事务
- 13. EF6嵌套事务
- 14. Dropwizard嵌套事务
- 15. java是否允许嵌套属性?
- 16. 允许嵌套的JSplitPanes控制父JSplitPanes
- 17. 让*作为嵌套的一元允许
- 18. quill.formatText()不允许嵌套格式
- 19. JTA嵌套事务锁
- 20. 递归/嵌套事务
- 21. 嵌套事务不支持
- 22. Jena TDB:嵌套事务
- 23. Spring上的嵌套事务
- 24. 事务嵌套过程
- 25. 嵌套函数不被允许,但为什么嵌套函数原型被允许? [C++]
- 26. 允许Three20吗?
- 27. C++中不允许嵌套名称空间声明的具体原因吗?
- 28. 如何在Java,Spring JDBC和MySQL中实现嵌套事务
- 29. 嵌套存储过程中的嵌套事务
- 30. 嵌套的属性不允许通过AJAX嵌入Mongoid文档
mysql不支持嵌套事务 – hamedkh 2013-02-21 15:44:30