我想知道sql server (UPDLOCK, ROWLOCK READPAST)
中这些关键字的用途以及何时使用它?我的意思是人们在什么样的情况下(UPDLOCK, ROWLOCK READPAST)
。
1) select top 1 COMMAND
from EXAMPLE_TABLE
with (UPDLOCK, ROWLOCK)
where PROCESSED=false;
只看到他们使用的上述sql UPDLOCK
,ROWLOCK
什么是UPDLOCK
,ROWLOCK
?
UPDLOCK
,ROWLOCK
会怎样?
2) SELECT TOP(1) COMMAND, PROCESSED
FROM TABLE WITH (READPAST)
WHERE PROCESSED = 0
什么是READPAST
?当我们使用READPAST
时会发生什么?
3) UPDATE OrderTable WITH ( ROWLOCK )
SET ProcessorID = @PROCID
WHERE OrderID IN ( SELECT TOP ( 20 )
OrderID
FROM OrderTable WITH ( ROWLOCK )
WHERE ProcessorID = 0)
这里上面的sql使用ROWLOCK
进行更新语句,也可以在嵌套的select子查询中......为什么??
ROWLOCK
会怎样?
这是我的要求,请以这样的方式解释每个点的大量示例,因此我可以理解这些关键字的用法。感谢
答案 0 :(得分:18)
它们是用于指定锁定方法的(DML
)语句:
UPDLOCK
将更新锁定放在正在选择的行上,直到事务结束。
其他交易无法更新或删除该行,但允许他们选择该行。
ROWLOCK
将锁定放在与页面或表锁定相对的行级别上。
READPAST
未返回已锁定的记录
这是使用两个语句的示例,这意味着在第一个事务结束之前,其他事务无法读取更新或删除数据。
BEGIN TRAN
select top 1 COMMAND
from EXAMPLE_TABLE
with (UPDLOCK, ROWLOCK)
where PROCESSED=false;
ROLLBACK
此处交易尚未结束:
BEGIN TRANSACTION
UPDATE TOP(1) EXAMPLE_TABLE
SET colum1 = colum1 + 1
如果执行select语句,则不会返回已锁定的记录,例如:
SELECT COUNT(*)
FROM EXAMPLE_TABLE WITH(READPAST)