SQL Server行锁

时间:2011-01-07 07:32:55

标签: sql-server-2005

如何在SQL Server 2005中进行行锁定。我执行一个用于行锁定的sql,即

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

它工作正常,但在这种情况下,行是锁定更新而不是选择。我只是想知道如何锁定一行,因此在SQL Server中发出SQL时,另一个用户无法看到该行。请指导我。感谢

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

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

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