关于"UPDATE ... SET .. WHERE ..."声明的原子性,我有一个相当基本和普遍的问题.
有一张桌子(没有额外的约束),
+----------+
| id | name|
+----------+
| 1 | a |
+----+-----+
Run Code Online (Sandbox Code Playgroud)
现在,我将"同时"执行以下4个语句(同时).
UPDATE table SET name='b1' WHERE name='a'
UPDATE table SET name='b2' WHERE name='a'
UPDATE table SET name='b3' WHERE name='a'
UPDATE table SET name='b4' WHERE name='a'
Run Code Online (Sandbox Code Playgroud)
是否只有一个UPDATE语句将与表更新一起执行?或者,多个UPDATE语句是否可以真正更新表?
我是否需要额外的事务或锁定才能让一个UPDATE写入值到表中?
谢谢
[编辑] 4个UPDATE语句从不同进程并行执行.[编辑]与Postgresql
其中一个语句将锁定记录(或页面或整个表,具体取决于您的引擎和锁定粒度)并将被执行.
其他人将等待资源被释放.
当lucky语句将提交时,其他人将重新读取表并且什么都不做(如果您的事务隔离模式设置为READ COMMITTED)或者无法序列化事务(如果事务隔离级别是SERIALIZABLE).