当我在事务中对该表运行更新时,会在表上设置哪种类型的锁?

问题描述 投票:0回答:1

假设我有以下交易:

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

在我提交事务之前,表 A 上将持有什么样的锁? 是X锁还是S锁还是其他类型的锁?

sql sql-server locking
1个回答
0
投票

这取决于表结构...如果 ID 列是主键并且主键没有其他列,则锁将是“行”锁:

如果 PK 是集群的,则通过“逻辑”行锁

如果 PK 是非集群的,则通过“物理”行锁

在 UPDATE 中,锁类型始终是 UPDATE 锁,当找到行时,以共享开始为独占锁。该锁的第一个共享部分禁止添加新的共享锁...以便当所有其他进程结束时共享锁可以转换为独占锁....

© www.soinside.com 2019 - 2024. All rights reserved.