我读到了#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是什么意思?
我将非常感谢您澄清我的疑虑。
答案 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