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

Jal*_*aer 5 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;
Run Code Online (Sandbox Code Playgroud)

更新:感谢所有答案,但我忘了告诉第三个语句抛出异常(Constraint Violation).

Pet*_*ley 8

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

SELECT table_name
     , engine
  FROM information_schema.tables t
 WHERE t.table_name IN('Table1','Table2','Table3');
Run Code Online (Sandbox Code Playgroud)

如果它们中的任何一个MyISAM,它们不是交易兼容的.你需要将它们全部更改为InnoDB

ALTER TABLE [TableName] ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)

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


Jal*_*aer 1

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