首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UDPLOCK使用行锁吗?

UDPLOCK使用行锁吗?
EN

Database Administration用户
提问于 2014-05-19 15:44:57
回答 1查看 994关注 0票数 0

我有一个UPDATE语句,它使用DTCTransaction中的一个UPDLOCK来避免死锁。

现在我在想。它是锁定在行级还是在表级上?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2014-05-19 15:55:10

现在我想知道它是锁定在行级还是在表级上?

来自泡泡

UPDLOCK指定要在事务完成之前获取和保存更新锁。UPDLOCK只在行级或页级接受读取操作的更新锁。如果UPDLOCK与TABLOCK相结合,或者由于其他原因而采取表级锁,则将使用排它(X)锁。当指定UPDLOCK时,将忽略READCOMMITTED和READCOMMITTEDLOCK隔离级别提示。例如,如果会话的隔离级别设置为SERIALIZABLE,并且查询指定(UPDLOCK,READCOMMITTED),则忽略READCOMMITTED提示,并使用SERIALIZABLE隔离级别运行事务。

还请看一下设计事务和优化锁定

对于(UPDLOCK),在DML语句中使用此提示会导致Server获取更新锁而不是共享锁。所获得的更新锁将保留到事务的其余部分。更新锁与共享锁兼容,但与其他更新锁不兼容。因此,获取更新锁的SELECT语句将被阻塞,而SELECT语句只允许读取数据而不更改数据。如果要先读取数据,然后更新数据,通常会指定WITH (UPDLOCK)。正因为如此,它可以被称为“具有更新意图的SELECT”。

票数 3
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/65400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档