在sql server中使用这些关键字有什么用(UPDLOCK,ROWLOCK READPAST)

时间:2014-06-14 20:38:04

标签: sql sql-server tsql

我想知道sql server (UPDLOCK, ROWLOCK READPAST)中这些关键字的用途以及何时使用它?我的意思是人们在什么样的情况下(UPDLOCK, ROWLOCK READPAST)

1) select top 1 COMMAND
from EXAMPLE_TABLE
with (UPDLOCK, ROWLOCK)
where PROCESSED=false;

只看到他们使用的上述sql UPDLOCKROWLOCK什么是UPDLOCKROWLOCK

UPDLOCKROWLOCK会怎样?

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会怎样?

这是我的要求,请以这样的方式解释每个点的大量示例,因此我可以理解这些关键字的用法。感谢

1 个答案:

答案 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)