SQL Server中的鎖可以分爲如下幾類

從大類來看,SQL Server中的鎖可以分爲如下幾類:

     共享鎖(S鎖):用於讀取資源所加的鎖。擁有共享鎖的資源不能被修改。共享鎖默認情況下是讀取了資源馬上被釋放。比如我讀100條數據,可以想像成讀完了第一條,馬上釋放第一條,然後再給第二條數據上鎖,再釋放第二條,再給第三條上鎖。以此類推直到第100條。這也是爲什麼我在圖9和圖10中的查詢需要將隔離等級設置爲可重複讀,只有設置了可重複讀以上級別的隔離等級或是使用提示時,S鎖才能持續到事務結束。實際上,在同一個資源上可以加無數把S鎖

    排他鎖(X鎖): 和其它任何鎖都不兼容,包括其它排他鎖。排它鎖用於數據修改,當資源上加了排他鎖時,其他請求讀取或修改這個資源的事務都會被阻塞,知道排他鎖被釋放爲止。

    更新鎖(U鎖) :U鎖可以看作是S鎖和X鎖的結合,用於更新數據,更新數據時首先需要找到被更新的數據,此時可以理解爲被查找的數據上了S鎖。當找到需要修改的數據時,需要對被修改的資源上X鎖。SQL Server通過U鎖來避免死鎖問題。因爲S鎖和S鎖是兼容的,通過U鎖和S鎖兼容,來使得更新查找時並不影響數據查找,而U鎖和U鎖之間並不兼容,從而減少了死鎖可能性。


 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章