2011-01-07 79 views
3

如何在SQL Server 2005中的行锁我执行了行锁定一个sql,这是SQL Server行锁定

SELECT * 
FROM authors 
WITH (HOLDLOCK, ROWLOCK) 
WHERE au_id = '274-80-9391' 

它工作得很好,但在这种情况下,行是不是选择更新锁。我只想知道如何锁定行,因为在SQL Server中发出SQL时,其他用户无法看到该行。请指导我。谢谢

+1

我不知道你想达到什么样的效果。 – 2011-01-07 07:38:42

回答

2

您不能隐藏一行,以便它不会被其他SQL查询看到。如果您打开一个事务,锁定一行并保持打开该事务,则可以导致其他SQL查询阻止等待事务结束并清除锁定。但是,如果查询以不同的事务隔离级别运行(例如:读取未提交),则它们将绕过锁并仍然可以看到该行的值。

1

如果您想跳过被锁定的行,可以使用SQL Server中的READPAST提示。这需要在正在读取锁定行的查询上指定,而不是锁定它们的查询。来自联机丛书:

指定数据库引擎不读取被其他事务锁定的行。当指定READPAST时,跳过行级锁定 。

具有READPAST提示的SELECT语句将返回所有非锁定的行并跳过锁定的行。