Mysql:ROLLBACK用于多个查询

时间:2010-12-29 15:07:50

标签: mysql rollback

我在由计划任务触发的PHP脚本中有三个以上的MySql查询。如果查询捕获错误,则脚本抛出异常并回滚该Mysql查询。它工作正常。

但是,如果第一个查询工作正常但不是第二个查询,则抛出异常,它会回滚第二个但不是第一个查询。

我对单个查询使用begin_trans(),commit和rollback(),因为有时候我需要回滚一个查询,有时候是所有查询。有没有办法回滚一个查询或所有查询?

提前致谢

更新:

我得到了它的工作,在begin_trans(),commit和rollback()中没有问题,数据库连接配置与其他查询的一个查询不同,疯狂的代码没有任何评论!!!

3 个答案:

答案 0 :(得分:3)

唯一需要回滚的是写操作(INSERT,UPDATE或DELETE)。我假设您使用“查询”一词来表示SELECT操作以外的其他内容。

如果您希望多个SQL语句一起成功或失败,则需要指定transaction

更新:

现在我很困惑;难怪你是。

交易是一种全有或全无的主张。听起来你好像混淆了两个不同的用例:一个是你想要在一个事务中进行单个查询而另一个是你想在一个事务中需要多个查询的用例。将两者结合起来让您感到困惑,我相信您的用户会感到困惑。

您提交交易,无法回滚。因此,您必须下定决心:操作A是其自身事务的一部分,或者在另一个事务中与B,C和D分组。但不是两个。

答案 1 :(得分:1)

回滚适用于当前事务中的所有查询。

[问题更新后编辑]

MySQL目前不支持嵌套事务,所以它是全有或全无的交易。您只能回滚事务中的所有查询或提交所有(成功的)。

答案 2 :(得分:1)

获得的回滚类型完全取决于人们如何定义事务。

这取决于业务用例。