代码之家  ›  专栏  ›  技术社区  ›  user276648 Jeremy Cook

MySQL在不提交当前事务的情况下创建表

  •  2
  • user276648 Jeremy Cook  · 技术社区  · 16 年前

    我希望我的程序能够安装插件,并回滚发生错误时所做的所有更改。所以我创建了一个事务来保存安装插件时添加的所有内容。问题是插件可能想要创建表,这样做会自动提交MySQL中的当前事务。

    Statements That Cause an Implicit Commit 在MySQL网站上。

    我知道怎么做吗?

    我考虑使用临时表,因为它们不是自动提交的,除非它们使用了太多的内存,但是看起来临时表无论如何都无法回滚(我还没有找到将它们转换为永久表的方法)。

    我刚刚发现 save points “,但我不太明白应该如何/何时使用它,也不知道它是否能帮助我实现我想要的目标。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Jonathan Leffler    16 年前

    保存点不是答案;它们是在提交事务时提交的。保存点是事务中可以回滚到的中间点。

    一些DBMS确实为您提供了对DDL(数据定义语言)语句(如CREATETABLE)的完整事务支持。其中之一就是IBMInformix动态服务器。

    许多DBMS不提供这种支持。甲骨文就是其中之一。

    基本上,您必须决定是否更好地使用/支持mysql和live,而不在DDL语句周围提供事务支持,或者是否迁移到另一个提供您所需功能的DBMS。理论上,还有第三种选择——在MySQL中添加对DDL事务的支持。不过,这可能有点困难(但如果你做得对,对整个MySQL社区来说非常有价值)。