SQL Server 幾種鎖的區別

NOLOCK(不加鎖)    
此選項被選中時,SQL  Server  在讀取或修改數據時不加任何鎖。  在這種狀況下,用戶有可能讀取到未完成事務(Uncommited  Transaction)或回滾(Roll  Back)中的數據,  即所謂的「髒數據」。    
        
HOLDLOCK(保持鎖)    
此選項被選中時,SQL  Server  會將此共享鎖保持至整個事務結束,而不會在途中釋放。    例如,「 SELECT * FROM my_table HOLDLOCK」就要求在整個查詢過程當中,保持對錶的鎖定,直到查詢完成才釋放鎖定。
        
UPDLOCK(修改鎖)    
此選項被選中時,SQL  Server  在讀取數據時使用修改鎖來代替共享鎖,並將此鎖保持至整個事務或命令結束。使用此選項可以保證多個進程能同時讀取數據但只有該進程能修改數據。    
        
TABLOCK(表鎖)    
此選項被選中時,SQL  Server  將在整個表上置共享鎖直至該命令結束。  這個選項保證其餘進程只能讀取而不能修改數據。    
        
PAGLOCK(頁鎖)    
此選項爲默認選項,  當被選中時,SQL  Server  使用共享頁鎖。    
        
TABLOCKX(排它表鎖)    
此選項被選中時,SQL  Server  將在整個表上置排它鎖直至該命令或事務結束。這將防止其餘進程讀取或修改表中的數據。數據庫

 

鎖衝突及其防止辦法 spa


在數據庫系統中,死鎖是指多個用戶(進程)分別鎖定了一個資源,並又試圖請求鎖定對方已經鎖定的資源,這就產生了一個鎖定請求環,致使多個用戶(進程)都處於等待對方釋放所鎖定資源的狀態。 

在SQL Server中,系統可以自動按期搜索和處理死鎖問題。系統在每次搜索中標識全部等待鎖定請求的進程會話,若是在下一次搜索中該被標識的進程仍處於等待狀態,SQL Server就開始遞歸死鎖搜索。
遞歸

相關文章
相關標籤/搜索