SQL Server NOLOCK关键字

时间:2010-01-21 06:27:41

标签: sql-server

当SQL客户端发出以下命令时:

select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'

这是否意味着该命令不会锁定tbl1 它不会被其他未提交的事务阻止tbl1

更新

[NOLOCK]:指定允​​许脏读。不会发出共享锁以防止其他事务修改当前事务读取的数据,并且其他事务设置的排它锁不会阻止当前事务读取锁定的数据。 参考:MSDN

2 个答案:

答案 0 :(得分:4)

这意味着第一个;你没有拿出任何锁 因此第二个;你不会被其他公开交易所阻止。请参阅table hints上的MSDN文档。

以下是transaction isolation levels上MSDN文档的链接 - 如果您考虑使用NOLOCK,可能会有用。 NOLOCK将SQL语句置于隔离级别读取未提交。如果您有一个多语句事务,您可以在大多数事务中将隔离级别设置在较低级别,并在需要时将其提升,而不是仅在事务中的一个或多个语句上降低它。

答案 1 :(得分:2)

两者。它还将从其他[未提交的]交易中读取未提交的数据(如果有的话)。