当SQL客户端发出以下命令时:
select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'
这是否意味着该命令不会锁定tbl1 或 它不会被其他未提交的事务阻止tbl1 ?
更新
[NOLOCK]:指定允许脏读。不会发出共享锁以防止其他事务修改当前事务读取的数据,并且其他事务设置的排它锁不会阻止当前事务读取锁定的数据。 参考:MSDN
答案 0 :(得分:4)
这意味着第一个;你没有拿出任何锁 和 因此第二个;你不会被其他公开交易所阻止。请参阅table hints上的MSDN文档。
以下是transaction isolation levels上MSDN文档的链接 - 如果您考虑使用NOLOCK
,可能会有用。 NOLOCK
将SQL语句置于隔离级别读取未提交。如果您有一个多语句事务,您可以在大多数事务中将隔离级别设置在较低级别,并在需要时将其提升,而不是仅在事务中的一个或多个语句上降低它。
答案 1 :(得分:2)
两者。它还将从其他[未提交的]交易中读取未提交的数据(如果有的话)。