You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

两个同时执行的特定UPDATE查询是否均可返回1行更新?

问题解答

嘿,这个问题问到点子上了!答案很明确:不可能两个客户端都收到“1 row has been updated”的反馈,必然只有一个客户端能得到1行更新的结果,另一个只能拿到“0 rows has been updated”的返回。

这背后是数据库的并发控制机制在起作用,简单拆解下逻辑:

  • 当第一个客户端执行那条 UPDATE table SET column = 'one' WHERE id = 0 AND column = 'zero' 语句时,数据库会立刻定位到符合条件的行,给这一行加上排他锁——就像给数据上了个“正在修改,其他人别动”的专属锁。
  • 这时候第二个客户端的 UPDATE 语句过来尝试修改同一行,发现锁已经被占,只能进入等待状态,直到第一个客户端的操作完成。
  • 等第一个客户端提交事务后,那行数据的 column 值已经变成了'one'。此时第二个客户端的 UPDATE 终于能执行条件判断,但 column='zero' 的条件已经不满足,自然找不到要更新的行,只能返回0行。

就算是用了乐观锁这类依赖版本校验的机制,两个客户端同时读到初始的'zero'值,但第一个提交成功后,第二个提交时会检测到数据已被修改,更新直接失败,结果还是只有一个能成功。

说白了,数据库的核心职责之一就是保证数据一致性,这种“同一行数据被两个并发请求同时修改成功”的情况,正是它要严格避免的场景。

内容的提问来源于stack exchange,提问作者jcoig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:13:14