自动提交DDL

时间:2015-04-24 20:29:40

标签: mysql transactions persistence rdbms ddl

我读到了#34; CREATE TABLE"和" DROP TABLE"语句是自动提交的。我试图了解他们在以下场景中的行为:

conn.setAutoCommit(false);
stmt = conn.createStatement("CREATE TABLE ...");

conn.commit();

在上面的例子中,将autoCommit设置为false会对CREATE TABLE自动提交产生任何影响。如果conn.setAutoCommit(false)确实覆盖了DDL自动提交属性,那么整个点是什么,因为默认情况下新连接处于自动提交模式。

我相信除了MySQL和旧版本的ORacle之外,大多数主要的RDBMS都允许DDL回滚。我的问题关注如果在MySQL中不允许DDL回滚,那么为DDL操作设置连接自动提交为false是什么意思?

我将非常感谢您澄清我的疑虑。

1 个答案:

答案 0 :(得分:1)

执行DDL语句会导致"隐式提交"。但该声明必须执行。

你提供的场景对我来说没有意义,createStatement方法不会将字符串作为参数,是吗?

我们通常会看到

stmt = conn.createStatement();
stmt.execute("CREATE TABLE ... ");

如果您实际执行了DDL语句,则会导致隐式提交,就像您在运行DDL语句之前立即运行COMMIT;语句一样。

但请不要相信我的话,自己动手,并参考MySQL参考手册的相应部分,了解您所运行的MySQL版本。

参考:https://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html