我在PHP脚本中有三个以上的MySql查询由预定任务触发。如果查询捕获到错误,脚本将抛出异常并回滚Mysql查询。它工作得很好。
但是,如果第一个查询工作正常,但第二个查询不工作,则抛出异常,它会回滚第二个查询,但不会回滚第一个查询。
我对单个查询使用begin_trans()、commit和rollback(),因为有时我需要回滚一个查询,有时需要回滚所有查询。有没有回滚一个查询或所有查询的方法?
提前感谢
更新:
我让它正常工作了,在begin_trans()、commit和rollback()中没有问题,一个查询的数据库连接配置与其他查询不同,没有任何注释的疯狂代码!
发布于 2010-12-29 23:10:23
唯一需要回滚的是写操作(插入、更新或删除)。我假设您使用“查询”这个词来表示除SELECT操作之外的其他含义。
如果您希望多个SQL语句一起成功或失败,则需要指定一个transaction。
更新:
现在我很困惑,难怪你会困惑。
事务是一个要么全有要么全无的命题。在我看来,您混淆了两种不同的用例:一种是在一个事务中使用一个查询,另一个是在一个事务中使用多个查询。将这两者结合起来会使您和您的用户感到困惑。
一旦提交了事务,就不能回滚。因此,您必须下定决心:要么操作A是它自己事务的一部分,要么在另一个事务中与B、C和D分组。但不是两个都有。
发布于 2010-12-29 23:23:40
回滚将应用于当前事务中的所有查询。
问题更新后编辑
MySQL目前不支持嵌套事务,所以要么全有要么全无。您只能回滚事务中的所有查询或提交所有查询(成功的查询)。
发布于 2012-11-08 16:04:09
回滚的类型完全取决于如何定义事务。
这取决于业务用例。
https://stackoverflow.com/questions/4555203
复制相似问题