ALTER TABLE是一个DDL(数据定义语言)语句;这在MySQL innodb引擎中不是事务性的。INSERT是一个DML语句(数据操作语言),它是事务性的。因为一个语句不是事务性的,而另一个是事务性的。所以这两个语句不应该组合在一个事务中。
我写了这个,但事务不起作用,我还将两个表都转换为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
引用MySQL手册:
某些语句无法回滚。一般来说,这些包括数据定义语言(DDL)语句,例如创建或删除数据库,即那些创建、删除或更改表或存储的数据库例程。
您应该将交易设计为不包含此类报表。如果您在事务的早期发布了一个无法滚动的语句返回,然后另一个语句稍后失败在这种情况下,不能通过发出ROLLBACK来回滚事务陈述
http://dev.mysql.com/doc/refman/5.6/en/cannot-roll-back.html