【发布时间】: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;
【问题讨论】:
声明 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;
【问题讨论】:
是的,单个 UPDATE/DELETE 语句是原子的,在操作进行时没有其他待处理事务可以修改该行。
InnoDB 将在整个事务期间对同一行执行一致、非锁定和可重复的读取,而不管任何其他事务对该行做了什么。使用 InnoDB,您还可以使用 SELECT ... FOR UPDATE 或 SELECT ... LOCK IN SHARE MODE 在事务开始时执行锁定读取,以防止在提交之前需要额外处理时其他事务修改该行。
【讨论】:
是的,增加字段的更新语句是原子的。
【讨论】: