【问题标题】:Is the statement update `table` set `field` = `field` + 1 atomic in InnoDB?InnoDB 中的语句 update `table` set `field` = `field` + 1 atomic 吗?
【发布时间】:2021-04-20 02:59:57
【问题描述】:

声明 update `table` set `field` = `field` + 1 where `id` = 1; 在 InnoDB 中是原子的吗? 或者它被执行为select new_field from `table` where `id` = 1; update table set `field` = new field where `id` = 1;

【问题讨论】:

    标签: mysql innodb atomic


    【解决方案1】:

    是的,单个 UPDATE/DELETE 语句是原子的,在操作进行时没有其他待处理事务可以修改该行。

    InnoDB 将在整个事务期间对同一行执行一致、非锁定和可重复的读取,而不管任何其他事务对该行做了什么。使用 InnoDB,您还可以使用 SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE 在事务开始时执行锁定读取,以防止在提交之前需要额外处理时其他事务修改该行。

    【讨论】:

      【解决方案2】:

      是的,增加字段的更新语句是原子的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-07
        相关资源
        最近更新 更多