我写这个,但交易不起作用,我也转换了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
答案 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