[英]MySQL update returns 0 rows affected in transaction
表帐户具有专用字段“ executor”供守护程序使用,以了解该帐户已被阻止以使用守护程序之一进行更新。
一步步:
封锁帐户:
UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234;
一些操作。 在此步骤中,另一个守护程序可以选择id = 1234的行并尝试对其进行更新(或更新其他字段,而不是'executor')
帐户状态返回:
UPDATE `account` SET `executor` = NULL WHERE `executor` = 2727 AND `id` = 1234;
有时在第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.