共享鎖(S鎖)和排它鎖(X鎖)詳解

釋義

共享鎖:(讀取)操作創建的鎖。其他用戶可以併發讀取數據,但任何事物都不能獲取數據上的排它鎖,直到已釋放所有共享鎖。
共享鎖(S鎖)又稱爲讀鎖,若事務T對數據對象A加上S鎖,則事務T只能讀A;其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖。這就保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。
 排它鎖
排它鎖:排它鎖又稱爲寫鎖((eXclusive lock,簡記爲X鎖)),若事物T對數據對象A加上X鎖,則只允許T讀取和修改A,其它任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。它防止任何其它事務獲取資源上的鎖,直到在事務的末尾將資源上的原始鎖釋放爲止。

獨佔鎖和共享鎖的區別

1.共享鎖(S鎖):如果事務T對數據A加上共享鎖後,則其他事務只能對A再加共享鎖,不能加排它鎖。獲准共享鎖的事務只能讀數據,不能修改數據。
排他鎖(X鎖):如果事務T對數據A加上排他鎖後,則其他事務不能再對A加任任何類型的封鎖。獲准排他鎖的事務既能讀數據,又能修改數據。
2.共享鎖下其它用戶可以併發讀取,查詢數據。但不能修改,增加,刪除數據。資源共享.
 

共享鎖的使用

在第一個連接中執行以下語句
begin tran
select * from table1 holdlock -holdlock人爲加鎖
where B='b2'
waitfor delay '00:00:30' --等待30秒
commit tran
在第二個連接中執行以下語句
begin tran
select A,C from table1
where B='b2'
update table1
set A='aa'
where B='b2'
commit tran
若同時執行上述兩個語句,則第二個連接中的select查詢可以執行
而update必須等待第一個事務釋放共享鎖轉爲排它鎖後才能執行 即要等待30秒

原文:http://www.cnblogs.com/jsStudyjj/p/5382557.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章