MySQL回滚事务的方法有效吗?

时间:2012-11-05 16:07:21

标签: mysql transactions sql-update innodb sql-insert

我在这里和google中看到多个答案,回滚事务意味着只回滚最后一个命令,而且我也读到了暗示所有命令。 (既没有记录也没有参考)

我需要做的是创建一个存储过程,在表A上插入/更新,获取A的最后一个ID,将该ID插入B,获取B的最后一个ID,将其插入C等,等等,等

我想知道在事务中提交或回滚所有命令的方法是哪个,以便启动事务,如果出现故障,请将所有命令作为原始文件返回。

带有IF错误和last_id的SQL代码将被预先确定,因为我也看到了很多不同的方法来获取最后一个id,我不知道哪个更好。

顺便说一句,所有表都是 InnoDB

亲切的问候,

2 个答案:

答案 0 :(得分:1)

正如START TRANSACTION, COMMIT, and ROLLBACK Syntax所述:

  

这些陈述控制了transactions的使用:

     

[ deletia ]

     
      
  • ROLLBACK 回滚当前交易,取消其更改。
  •   

答案 1 :(得分:1)

如果您BEGIN进行了一次交易,那么在您COMMIT之前不会应用任何内容。删除连接或发出ROLLBACK与永不提交连接相同。

当然,这是假设您已设置autocommit,通常就是这种情况。

如果将它们包装为事务,也可以回滚各个命令。

the documentation中提供了更多信息。

请记住,MyoAM和其他引擎不支持InnoDB所做的事务。此外,只能回滚INSERTUPDATEDELETEREPLACE语句。其他的东西,比如架构的改动,不是。