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

事务内执行UPDATE操作时,表A会持有哪种锁?X锁/S锁还是其他?

事务提交前表A的锁类型分析

针对你给出的事务代码:

BEGIN TRAN
DECLARE @id UNIQUEIDENTIFIER = NEWID()
UPDATE A
WHERE A.id = @id

核心结论如下:

  • 由于NEWID()生成的是全新唯一标识符,表A中几乎不存在匹配@id的记录,因此该UPDATE语句不会修改任何行。
  • 事务提交前,表A会持有意向排他锁(IX锁):这是因为UPDATE属于写操作,数据库引擎会先在表级别添加IX锁,向其他事务声明“本事务可能会对表内某些行加排他锁”。由于未匹配到目标行,不会在行级别添加X锁(排他锁)。
  • 补充说明:如果表A的id是主键(聚集索引),引擎在查找不存在的@id时,可能会在索引相关节点添加短暂的共享锁(S锁),但这类锁会在查找完成后立即释放,不会持有到事务提交阶段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:29:52