【发布时间】:2011-04-22 05:51:40
【问题描述】:
我只安装了 SQL Server 2008R2,但我需要与拥有 2005 的客户沟通。
[1] 告诉:
-
"无锁
这不会锁定任何对象。这是 SELECT 操作的默认值。它不适用于 INSERT、UPDATE 和 DELETE 语句"
[2] 似乎没有提到它,但我在 SSMS/SS 2008R2 中的检查表明 nolock 不是 SELECT 的默认提示。
WITH(NOLOCK) 真的是 SQL Server 2005 SELECT 中的默认设置吗?
BOL2005/2008 写在哪里?
更新:
在“它写在哪里”下,我希望看到所有从 [1] 部分引用的答案/cmets/澄清(或者,更好的是引用):
-
“这不会锁定任何对象”
没有 NOLOCK 的 SELECT 是否在 SQL Server 2005 中放置了任何锁(具有默认隔离级别 READ UNCOMMITTED)?
...在 SQL Server 2008 中(分别已提交读)?我在上面读到的内容可以理解为 NOLOCK 允许忽略/绕过另一个事务放置的现有锁......但目前的事务(带有 NOLOCK 的 SELECT)是否放置(或试图放置)它自己的还不清楚锁...
READ UNCOMMITTED 隔离级别(用作使用 NOLOCK 提示的同义词)是否意味着没有任何锁定?
“它不适用于 INSERT、UPDATE 和 DELETE 语句”
好像是对的?
是因为它们(INSERT、UPDATE 和 DELETE)总是锁定而 SELECT 没有锁定吗?
等等。
[1]
http://blog.sqlauthority.com/2007/04/27/sql-server-2005-locking-hints-and-examples/
[2]
SQL Server 2005 联机丛书。表提示 (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ms187373(SQL.90).aspx
【问题讨论】:
标签: sql-server sql-server-2005 tsql sql-server-2008 transactions