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