2012-07-19 47 views
0

可能重複:
SQL Server NOLOCK keywordSQL Server的下列SQL查詢有什麼區別?

是什麼這些SQL查詢之間的區別?

  1. SQL查詢:

    SELECT 
    U.ID_USER AS ID, 
    U.USERNAME AS NICK, 
    U.PASSWORD AS PASS 
    FROM T_USERS AS U WITH (NOLOCK) 
    
  2. SQL查詢:即使它被讀的數據是

    SELECT 
    U.ID_USER AS ID, 
    U.USERNAME AS NICK, 
    U.PASSWORD AS PASS 
    FROM T_USERS AS U 
    
+5

簡短回答:前者將嘗試*以避免鎖定行,因此可能會讀取正在更新中的數據。長答案:谷歌「數據庫鎖定」並閱讀;這是論文的主題。 – 2012-07-19 17:09:38

回答

1

第一個(使用NOLOCK查詢)不會被阻塞專門鎖定並可能返回尚未提交的行。如果讀取未提交的數據不是問題,則通常使用NOLOCK來減少阻塞。 Nolock指定在讀取數據時不要嘗試鎖定表,行,頁面等資源。

如果任何一行正在修改或被鎖定,它將被阻塞。它將永遠不會讀取尚未提交的數據,因爲它將被正在更改的進程阻塞數據。當你不想讀取數據不確定和精確性至關重要的時候,這是通常的做法。

+1

何時可以鎖定?當我使用「無鎖」查詢? – JohnMalcom 2012-07-19 17:20:54

+2

沒有鎖定意味着它不會被任何其他進程阻塞,因爲此進程沒有嘗試進行任何鎖定(如您指定的nolock)。默認情況下,進程通常使用表,頁面或行等資源上的共享鎖。 – 2012-07-19 17:30:45

相關問題