使用create语句进行InnoDb事务

时间:2011-12-23 20:37:19

标签: mysql transactions innodb

在事务中是否允许使用CREATE TABLE tbl_name等sql语句。

例如:

begin;

CREATE TABLE .......;

sdfghjk;

rollback;

尽管事务中的语句失败,并且最后还是回滚,仍然会创建表。如果事务中的语句失败,有没有办法阻止创建表?

2 个答案:

答案 0 :(得分:1)

DDL语句在事务中是允许的,但通常不受事务的影响。从MySQL文档中可以和不可以回滚的内容:

  

某些语句无法回滚。通常,这些包括数据   定义语言(DDL)语句,例如那些创建或   drop database,创建,删除或更改表或存储的数据库   例程。

     

您应该将交易设计为不包含此类声明。如果   您在无法滚动的事务中提前发出语句   回来,然后另一个声明失败,完全的效果了   在这种情况下,通过发出ROLLBACK无法回滚事务   言。

Source

答案 1 :(得分:1)

如果您仍然需要使用表格,则可以执行create temporary table....。它不提交事务,但在关闭连接时将被删除。