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

MySQL更新返回事务中受影响的0行,mysql,transactions,sql-update,rows-affected,Mysql,Transactions,Sql Update,Rows Affected,表account有一个特殊字段“executor”,让守护进程知道该帐户已被阻止,无法使用其中一个守护进程进行更新 逐步: 启动事务 通过以下方式冻结帐户: UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234; 一些行动。在此步骤中,另一个守护进程可以选择id为1234的行并尝试更新它(或更新另一个字段,而不是“executor”) 返回的帐户状态为: UPDATE `account`

表account有一个特殊字段“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

    进一步的事务被回滚。。。
    如果再次重复操作,则无需重置executor的值,一切正常…

    您有多个进程正在运行,并且在更新同一帐户ID的两个进程之间出现冲突?但在第二步后,记录必须锁定事务,不是吗?