mysql事务不能与innodb表一起使用

时间:2013-08-29 07:41:46

标签: php mysql asp.net sql

我写这个,但交易不起作用,我也转换了innodb类型的两个表,任何人都可以指导我在编码或其他交易方式中的错误。

mysql_query("begin;");
  $query1 = mysql_query("ALTER TABLE products ADD COLUMN {$_POST[fields]} VARCHAR(60)");

  $query2 = mysql_query("INSERT INTO fields (cid5,fields,field_title,field_type)
                      VALUE ('$_POST[cid]','$_POST[fields]','$_POST[field_title]','$_POST[field_type]')");                

if (($query1)&&($query2)) {mysql_query("commit;");}
else {mysql_query("rollback;");}

}

我正在使用mysql 5.1.69-cll

1 个答案:

答案 0 :(得分:1)

ALTER TABLE是一种DDL(数据定义语言)语句;这在MySQL innodb引擎中不是事务性的。 INSERT是一种DML语句(数据操作语言),它是事务性的。因为一个语句不是事务性的,一个是,所以不应该在事务中组合这两个语句。

引用MySQL手册:

  

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

     

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

http://dev.mysql.com/doc/refman/5.6/en/cannot-roll-back.html