繁体   English   中英

MySQL更新返回0行在事务中受影响

[英]MySQL update returns 0 rows affected in transaction

表帐户具有专用字段“ executor”供守护程序使用,以了解该帐户已被阻止以使用守护程序之一进行更新。

一步步:

  1. 开始交易
  2. 封锁帐户:

     UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234; 
  3. 一些操作。 在此步骤中,另一个守护程序可以选择id = 1234的行并尝试对其进行更新(或更新其他字段,而不是'executor')

  4. 帐户状态返回:

     UPDATE `account` SET `executor` = NULL WHERE `executor` = 2727 AND `id` = 1234; 
  5. 承诺

有时在第4步mysql返回成功执行状态,但是0行受到影响。 发生10000次交易1次。

我究竟做错了什么? 还是它的MySQL错误?

更新:

经过观察,我得到以下信息:

1)首先我们做

UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234;

2)交易冻结记录

3)我在交易期间

`UPDATE `account` SET `balance` = 1 WHERE `id` = 1234;`

4)此查询后

SELECT `executor` FROM `account` WHERE `id`=1234

给出结果2727

在重复第3点和第4点之后,我们得到了结果executor = NULL ...或0,因为我将结果写入类型为int的变量,但这可能都是相同的NULL ...,但并不是那么重要。无论如何,执行者不再是一个值2727

进一步的事务被回滚...如果再次重复操作,一切都很好,而无需重置执行程序的值...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM