是什麼這些SQL查詢之間的區別?
SQL查詢:
SELECT U.ID_USER AS ID, U.USERNAME AS NICK, U.PASSWORD AS PASS FROM T_USERS AS U WITH (NOLOCK)
SQL查詢:即使它被讀的數據是
SELECT U.ID_USER AS ID, U.USERNAME AS NICK, U.PASSWORD AS PASS FROM T_USERS AS U
是什麼這些SQL查詢之間的區別?
SQL查詢:
SELECT
U.ID_USER AS ID,
U.USERNAME AS NICK,
U.PASSWORD AS PASS
FROM T_USERS AS U WITH (NOLOCK)
SQL查詢:即使它被讀的數據是
SELECT
U.ID_USER AS ID,
U.USERNAME AS NICK,
U.PASSWORD AS PASS
FROM T_USERS AS U
第一個(使用NOLOCK查詢)不會被阻塞專門鎖定並可能返回尚未提交的行。如果讀取未提交的數據不是問題,則通常使用NOLOCK來減少阻塞。 Nolock指定在讀取數據時不要嘗試鎖定表,行,頁面等資源。
如果任何一行正在修改或被鎖定,它將被阻塞。它將永遠不會讀取尚未提交的數據,因爲它將被正在更改的進程阻塞數據。當你不想讀取數據不確定和精確性至關重要的時候,這是通常的做法。
何時可以鎖定?當我使用「無鎖」查詢? – JohnMalcom 2012-07-19 17:20:54
沒有鎖定意味着它不會被任何其他進程阻塞,因爲此進程沒有嘗試進行任何鎖定(如您指定的nolock)。默認情況下,進程通常使用表,頁面或行等資源上的共享鎖。 – 2012-07-19 17:30:45
簡短回答:前者將嘗試*以避免鎖定行,因此可能會讀取正在更新中的數據。長答案:谷歌「數據庫鎖定」並閱讀;這是論文的主題。 – 2012-07-19 17:09:38