1) select top 1 COMMAND
from EXAMPLE_TABLE
with (UPDLOCK, ROWLOCK)
where PROCESSED=false;
看看上面他们使用的sqlUPDLOCK, ROWLOCK什么是UPDLOCK, ROWLOCK?
会发生什么UPDLOCK, ROWLOCK ?
2) SELECT TOP(1) COMMAND, PROCESSED
FROM TABLE WITH (READPAST)
WHERE PROCESSED = 0
what is READPAST?当我们使用READPAST那么会发生什么呢?
3) UPDATE OrderTable WITH ( ROWLOCK )
SET ProcessorID = @PROCID
WHERE OrderID IN ( SELECT TOP ( 20 )
OrderID
FROM OrderTable WITH ( ROWLOCK )
WHERE ProcessorID = 0)
这里使用上面的sqlROWLOCKfor update 语句以及嵌套选择子查询......为什么?
会发生什么ROWLOCK ?
我的请求是,请用大量示例来解释每一点,以便我能够理解这些关键字的用法。谢谢
他们是 (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