2010-06-02 39 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

相关问题