我搜索了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个语句引发异常(约束违规)。
答案 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 ...它不支持多个表的回滚......这可能会在不久的将来改变(我希望)!