小编use*_*646的帖子

带有“where”事务的单个更新语句安全吗?

据我所知,单个更新语句是原子的,该行将在更新过程中被锁定。但是,当存在“何处”原因时,它仍然是原子的吗?

例如:

table: ABC
-------------
|colA | colB|
-------------
|123  | 0   |

--update 1
update ABC set colA=456, colB=1 where colB=0;

--update 2
update ABC set colA=556, colB=2 where colB=0;
Run Code Online (Sandbox Code Playgroud)

由于where原因,更新时会先检查colB值并找到表中的该行,然后锁定该行进行更新,对吧?如果同时执行更新1和更新2,是否有可能两者都成功执行并且其中一个覆盖另一个的值?

是不是像下面这样写比较好?

START TRANSACTION;
  update ABC set colA=456, colB=1 where colB=0;
COMMIT;
Run Code Online (Sandbox Code Playgroud)

mysql innodb

6
推荐指数
1
解决办法
3718
查看次数

标签 统计

innodb ×1

mysql ×1