MySql可以在多个表上回滚sql事务吗?

时间:2010-06-22 15:01:07

标签: mysql transactions

我搜索了MySql文档但一无所获。我试过这个......回滚似乎没有取消table1和table2中的插入

Start Transaction;

INSERT INTO Table1(field1,field2) VALUES (value1, value2);

INSERT INTO Table2(field3,field4) VALUES (value3, value4);

INSERT INTO Table3(field5,field6) VALUES (value5, value6);

Rollback;

更新:感谢您的所有答案,但我忘了告诉第3个语句引发异常(约束违规)。

3 个答案:

答案 0 :(得分:8)

是的,但仅适用于支持交易的表格。要检查您的表是否兼容,请执行此操作

SELECT table_name
     , engine
  FROM information_schema.tables t
 WHERE t.table_name IN('Table1','Table2','Table3');

如果其中任何一个是MyISAM,则它们与事务不兼容。您需要将它们全部更改为InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB;

但要注意 - MyISAM支持InnoDB没有的一些功能,例如FULLTEXT搜索。

答案 1 :(得分:2)

尝试将其添加到脚本的开头:

SET autocommit=0;

默认情况下,MySQL会在每个语句之后发出提交,除非你另有说明。

答案 2 :(得分:1)

截至当前版本的MySql v5.1 ...它不支持多个表的回滚......这可能会在不久的将来改变(我希望)!