Mysql:回滚多个查询

标签 mysql rollback

我在由计划任务触发的 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/

相关文章:

mysql - 在 MYSQL 的 Case When 语句中使用四个条件

mysql - 将内存表用于静态值集

mysql - 当 MYSQL 中 BEFORE DELETE ON "table"触发器失败时会发生什么?

python - 事务回滚

python - 时间戳作为sql查询中的变量

c# - 如何正确打开mysql连接?

mysql - 如何在不使用子查询的情况下将行转换为基于列的类型过滤器

mercurial - 在Mercurial中回滚多个提交(在公开之前)

installation - 回滚时在WIX中注销COM组件,有必要吗?

java - Spring事务有几个操作和回滚