表帐户有守护进程的特殊字段'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次交易中发生一次。
我做错了什么?还是它的mysql bug?
更新:
观察后我得到以下内容:
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
进一步交易回滚...... 如果再次重复操作,一切都很好而不重置执行者的价值...