我在由计划任务触发的 PHP 脚本中有三个以上的 MySql 查询。如果查询发现错误,脚本会抛出异常并回滚该 Mysql 查询。它工作正常。
但是如果第一个查询工作正常,但第二个查询没有,抛出异常,它回滚第二个而不是第一个查询。
我对单个查询使用 begin_trans()、commit 和 rollback(),因为有时我需要回滚一个查询,有时需要回滚所有查询。有没有办法回滚一个查询或所有查询?
提前致谢
更新:
我让它工作了,在 begin_trans()、commit 和 rollback() 中没有问题,一个查询的数据库连接配置与其他查询不同,疯狂的代码没有任何评论!!!
最佳答案
唯一需要回滚的是写操作(INSERT、UPDATE 或 DELETE)。我假设您使用“查询”一词来表示 SELECT 操作以外的其他含义。
如果您希望多个 SQL 语句同时成功或失败,您需要指定一个 transaction .
更新:
现在我很困惑;难怪你是。
交易是一个全有或全无的命题。在我看来,您正在混淆两个不同的用例:一个是您希望在一个事务中进行单个查询,另一个是您希望在一个事务中进行多个查询。将两者结合起来会让您和您的用户感到困惑。
一旦您提交了事务,就无法将其回滚。因此您必须下定决心:要么操作 A 是其自身事务的一部分,要么与 B、C 和 D 分组在另一个事务中。但不是两者。
关于Mysql:回滚多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4555203/