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

7

我已经查阅了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;
更新:感谢所有的回答,但我忘了说第三个语句会抛出异常(违反约束)。

1
你是否针对这些表使用了事务型引擎? - Paolo
3个回答

10
是的,但仅适用于支持事务的表格。要检查您的表格是否兼容,请执行以下操作:
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搜索。


2
尝试在您的脚本开头添加以下内容:
SET autocommit=0;

默认情况下,MySQL会在每个语句后执行提交操作,除非您另有规定。

我尝试过这个……如果脚本中间抛出错误,它就无法工作。 - Jalal El-Shaer
不是一个好主意,因为如果您错误地删除记录,就无法回滚事务。 - OMG Ponies
开始事务,自动设置自动提交为关闭。 - Leandro Bardelli

1
截至当前版本的MySql v5.1...它不支持在多个表上进行回滚...希望不久的将来会有所改变!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接