2010-06-02 85 views
2

我想我的程序能夠安裝插件創建表,並回滾如果發生錯誤所做的所有更改。所以我創建了一個事務來保存安裝插件時添加的所有內容。問題是插件可能想要創建表,並且這樣做會自動提交MySQL中的當前事務。的MySQL不提交當前事務

Statements That Cause an Implicit Commit在MySQL網站。

我如何能做到這一點任何想法?

我想過使用臨時表,因爲它們不會自動提交,除非它們使用的內存太多,但它看起來像臨時表無法回滾(並且我還沒有找到方法將它們轉換爲永久表)。

我剛剛發現了關於「save points」,但我真的不明白應該如何使用它,以及它是否可以幫助我實現我想要的效果。

回答

2

保存點不是答案;他們承諾交易時承諾。保存點是您可以回滾的事務中的中間點。

某些DBMS做到爲您提供全面的DDL事務支持(數據定義語言)語句,例如CREATE TABLE。其中之一就是IBM Informix Dynamic Server。

許多DBMS不爲你提供這樣的支持。 Oracle就是其中之一。

基本上,你必須決定它是否是更好地使用/支持MySQL和生活離不開周圍DDL語句的事務支持或是否遷移到提供你所需要的功能的另一個DBMS。理論上講,還有第三種選擇 - 在MySQL中添加對DDL周圍事務的支持。但是這可能有點困難(但如果你做對了,整個MySQL社區是非常值得的)。

+0

好的謝謝你的信息。不知道連Oracle都不支持它。 我的應用程序使用一個允許支持不同DBMS的抽象層,所以我不能深入瞭解每個DBMS並在DDL上添加對完整事務的支持......即使它只是MySQL,也可能也是如此對我來說很複雜! – user276648 2010-06-02 09:52:08