据我所知,单个更新语句是原子的,该行将在更新过程中被锁定。但是,当存在“何处”原因时,它仍然是原子的吗?
例如:
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)