加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql-server – 带UPDLOCK的HOLDLOCK

发布时间:2021-03-06 05:56:16 所属栏目:编程 来源:网络整理
导读:它在事宜中行使HOLDLOCK或UPDLOCK(好比说T1),不会阻止来自另一个事宜(好比T2)的读会见. 据我相识,在T1完成之前,HOLDLOCK将阻止T2更新/删除;而且UPDLOCK将阻止T2的更新/删除/插入.在这两个T2中都将具有对这些记录的读会见权. 可是,行使两者(如:HOLDLOCK,UPDLO

它在事宜中行使HOLDLOCK或UPDLOCK(好比说T1),不会阻止来自另一个事宜(好比T2)的读会见.

据我相识,在T1完成之前,HOLDLOCK将阻止T2更新/删除;而且UPDLOCK将阻止T2的更新/删除/插入.在这两个T2中都将具有对这些记录的读会见权.

可是,行使两者(如:HOLDLOCK,UPDLOCK)乃至可以阻止T2举办读取会见.当我们行使它们时到底产生了什么?

感激您的看法

更新:

这不是我所看到的:

譬喻:

在查询1中:

begin tran

select * from tblTest WITH (UPDLOCK,HOLDLOCK)

WAITFOR DELAY '00:00:10'

commit tran

在查询2中:

select * from tblTest

在查询1完成之前,查询2不会发生功效.

办理要领

UPDLOCK影响锁的范例.这意味着对付SELECT语句,将回收U锁而不是S锁.在默认的读取提交级别,它们将在读取数据后当即开释.

以上合用于行和页锁.对付表级锁定BOL状态

If UPDLOCK is combined with TABLOCK,or a table-level lock is taken
for some other reason,an exclusive (X) lock will be taken instead.

HOLDLOCK意味着您得到了可序列化的断绝语义,因此在事宜竣事之前锁定不会被开释,而且至少会锁定查询所涵盖的整个范畴以防备插入幻像.

U锁与其他S锁兼容,但不与其他U锁兼容(拜见Lock compatibility matrix),因此假如锁在行或页面级别取出,除非他们也行使UPDLOCK提醒,不然不会阻止其他读取器.

假如因为UPDLOCK而取出工具级别X锁定,则读取器将被阻止实行获取表格上的IS锁定.在您的示例查询中,实行查察sys.dm_tran_locks,同时阻止第二个查询以查察两个事宜都有/守候的锁.

对付您的题目中的查询

SELECT *
FROM   tblTest WITH (UPDLOCK,HOLDLOCK)

假如查询打算在堆上表现扫描,则始终会在工具上得到X锁定.假如是索引扫描,则取决于所行使的锁定粒度(凡是在执行at least 5,000较初级别锁定后实行锁定进级到表级别).

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读