基本的SQL原子性"UPDATE ... SET .. WHERE ..."

rnd*_*gen 2 sql atomicity

关于"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

Qua*_*noi 8

其中一个语句将锁定记录(或页面或整个表,具体取决于您的引擎和锁定粒度)并将被执行.

其他人将等待资源被释放.

当lucky语句将提交时,其他人将重新读取表并且什么都不做(如果您的事务隔离模式设置为READ COMMITTED)或者无法序列化事务(如果事务隔离级别是SERIALIZABLE).