我有一个UPDATE语句,它使用DTCTransaction中的一个UPDLOCK来避免死锁。
现在我在想。它是锁定在行级还是在表级上?
发布于 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”。
https://dba.stackexchange.com/questions/65400
复制相似问题