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

PostgreSQL同一事务中已锁行能否被本事务内其他操作访问?

同一事务内重复更新同一行的锁机制问题

你给出的事务执行流程代码如下:

BEGIN -- txID: 1234

UPDATE tbl_1 SET field = value WHERE id IN (1); -- 为简化示例
-- 获取ID为1的行的锁

UPDATE tbl_1 SET field = new_value WHERE id IN (1); -- 仅为测试再次更新同一行
-- 该操作是否仍需等待前一操作的锁?

COMMIT -- txID: 1234
-- 释放ID为1的行的锁

针对你的问题,答案很明确:

  • 第二个UPDATE操作不需要等待前一操作的锁,可以直接执行。

原因在于数据库锁的设计逻辑:锁的核心作用是隔离不同事务之间的并发操作,避免数据冲突。而同一事务内的所有操作属于同一个上下文,数据库能够识别出后续操作来自持有锁的同一个事务,因此会直接允许该操作复用已持有的锁,无需触发锁等待或阻塞逻辑。

在这个场景中,第一个UPDATE获取id=1行的排他锁后,该锁会被当前事务持续持有直到COMMIT,但同一事务内的后续更新操作无需重新申请锁,直接基于已持有的锁完成数据修改即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:42:02