NOLOCK、HOLDLOCK、UPDLOCK、TABLOCK、TABLOCKX

NOLOCK(不加鎖)
  此選項被選中時,SQL Server 在讀取或修改數據時不加任何鎖。 在這種狀況下,用戶有可能讀取到未完成事務(Uncommited Transaction)或回滾(Roll Back)中的數據, 即所謂的「髒數據」。sql

  HOLDLOCK(保持鎖) 
  此選項被選中時,SQL Server 會將此共享鎖保持至整個事務結束,而不會在途中釋放。數據庫

  UPDLOCK(修改鎖) 
  此選項被選中時,SQL Server 在讀取數據時使用修改鎖來代替共享鎖,並將此鎖保持至整個事務或命令結束。使用此選項可以保證多個進程能同時讀取數據但只有該進程能修改數據。server

  TABLOCK(表鎖) 
  此選項被選中時,SQL Server 將在整個表上置共享鎖直至該命令結束。 這個選項保證其餘進程只能讀取而不能修改數據。對象

  PAGLOCK(頁鎖) 
  此選項爲默認選項, 當被選中時,SQL Server 使用共享頁鎖。進程

  TABLOCKX(排它表鎖) 
  此選項被選中時,SQL Server 將在整個表上置排它鎖直至該命令或事務結束。這將防止其餘進程讀取或修改表中的數據。事務

  HOLDLOCK 持有共享鎖,直到整個事務完成,應該在被鎖對象不須要時當即釋放,等於SERIALIZABLE事務隔離級別it

  NOLOCK 語句執行時不發出共享鎖,容許髒讀 ,等於 READ UNCOMMITTED事務隔離級別io

  PAGLOCK 在使用一個表鎖的地方用多個頁鎖table

  READPAST 讓sql server跳過任何鎖定行,執行事務,適用於READ UNCOMMITTED事務隔離級別只跳過RID鎖,不跳過頁,區域和表鎖數據

  ROWLOCK 強制使用行鎖

  TABLOCKX 強制使用獨佔表級鎖,這個鎖在事務期間阻止任何其餘事務使用這個表

  UPLOCK 強制在讀表時使用更新而不用共享鎖

注意: 鎖定數據庫的一個表的區別   SELECT * FROM table WITH (HOLDLOCK) 其餘事務能夠讀取表,但不能更新刪除   SELECT * FROM table WITH (TABLOCKX) 其餘事務不能讀取表,更新和刪除

相關文章
相關標籤/搜索