DDL的自动提交

Auto-COmmit of DDL

我读到 "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 有什么意义?

非常感谢您的意见澄清我的疑惑。

执行 DDL 语句会导致 "implicit commit"。但是语句必须执行。

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

我们通常会看到

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

如果您实际执行 DDL 语句,它会导致隐式提交,就好像您在 运行 DDL 语句之前有一个 运行 COMMIT; 语句一样。

但不要相信我的话,自己尝试一下,并参考 MySQL 参考手册的相应部分,了解您正在 MySQL 的哪个版本 运行ning .

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