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

时间:2013-11-21 05:45:20

标签: mysql transactions sql-update rows-affected

表帐户有守护进程的特殊字段'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. 提交
  6. 有时候在第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

    进一步交易回滚...... 如果再次重复操作,一切都很好而不重置执行者的价值...

0 个答案:

没有答案