2012-11-05 26 views
0

我在这里看到了多个答案,并在谷歌回滚一个事务意味着只有最后一个命令的回滚,而且我也读取,这意味着所有的命令。 (既没有记录也没有被引用)MySQL是哪种方法回滚交易有效?

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

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

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

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

亲切的问候,

+0

您需要关闭自动提交功能。然后可以将一组更新作为单个事务提交。 http://dev.mysql.com/doc/refman/5.0/en/commit.html – Jaydee

+0

的官方文档,autocommit设置为关闭,如果你做了“开始交易”。是不是真的? –

回答

1

如果BEGIN事务,然后什么都不会得到应用,直到你COMMIT它。放弃您的连接或发出ROLLBACK与永不犯下它相同。

这当然假设你已经设置了autocommit,这通常是这种情况。

如果您将它们作为事务包装,您也可以回退单个命令。

更多信息请见the documentation

请记住,MyISAM和其他引擎不支持InnoDB所做的事务。此外,只有INSERT,UPDATE,DELETEREPLACE语句才能够回滚。其他的东西,比如对模式的改变,都不是。

+0

如果你使用启动事务,autocommit设置为off,说文档。这是真的?哪个更好?开始或开始交易? +1顺便说一句 –

+1

我不会太担心在交易过程中'autocommit'被切换。只要发布一个'BEGIN',一系列的操作和一个'COMMIT',如果你准备永久使用它的话。如果在操作过程中遇到错误,您可以恢复或中止事务。 – tadman

+0

优秀。你可以建议什么方法来检查是否有错误并且安全?因为我读了三四种方法,怀疑“最后一个错误”或“一些错误”,我需要“任何错误” –