當SQL客戶端發出以下命令:SQL服務器NOLOCK關鍵字
select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'
豈不是該命令將不會鎖定TBL1或它不會被其他未提交的事務被阻止作出tbl1?
更新:
[NOLOCK]:指定髒讀是允許的。不會發出共享鎖以防止其他事務修改當前事務讀取的數據,並且由其他事務設置的排他鎖不會阻止當前事務讀取鎖定的數據。 REF:MSDN
當SQL客戶端發出以下命令:SQL服務器NOLOCK關鍵字
select * into tbl2
FROM tbl1 (nolock)
WHERE DateCreated < '2009/01/01'
豈不是該命令將不會鎖定TBL1或它不會被其他未提交的事務被阻止作出tbl1?
更新:
[NOLOCK]:指定髒讀是允許的。不會發出共享鎖以防止其他事務修改當前事務讀取的數據,並且由其他事務設置的排他鎖不會阻止當前事務讀取鎖定的數據。 REF:MSDN
這意味着第一個;你沒有拿出任何鎖和因此第二;你不會被其他公開交易阻止。請參閱table hints上的MSDN文檔。
以下是關於transaction isolation levels上MSDN文檔的鏈接 - 如果您正在考慮使用NOLOCK
,可能會有所幫助。 NOLOCK
將SQL語句隔離級別讀取未提交。如果您有多語句事務,則可以爲大多數事務設置較低級別的隔離級別,並在需要時進行提升,而不是僅在事務中的一個或多個語句中降低級別。
兩者。它還將讀取來自其他[未提交]交易(如果有)的未提交數據。