for update (排他鎖)
目的是在執(zhí)行這個 select 查詢語句的時候薪捍,會將對應(yīng)的索引訪問條目進(jìn)行上排他鎖(X 鎖)惶傻,也就是說這個語句對應(yīng)的鎖就相當(dāng)于update帶來的效果陶衅。
查詢到的記錄不允許別的事務(wù)再更新和加鎖域慷。
lock in share mode(共享鎖)
目的是在執(zhí)行這個select查詢語句時环形,會將對應(yīng)的索引條目進(jìn)行上share鎖。
當(dāng)前事務(wù)上所之后谤草,別的事務(wù)也可以對這些記錄上share鎖跟束,但不允許上排他鎖,更不允許更新咖刃。
鎖定范圍
可能鎖住全表,也可能鎖住部分記錄
當(dāng)查詢語句對應(yīng)的結(jié)果的主鍵不明確時憾筏,會鎖住全表嚎杨。
當(dāng)查詢語句對應(yīng)的結(jié)果主鍵明確時,只會鎖住查詢到的記錄氧腰。
具體的是否鎖住了全表可以開啟兩個窗口枫浙,每個窗口中開啟一個事務(wù),模擬上鎖過程來觀察古拴。
區(qū)別
很顯然箩帚,for update控制的更嚴(yán)格。
業(yè)務(wù)場景中黄痪,如果只需要保證當(dāng)前事務(wù)讀取到的數(shù)據(jù)不會被修改紧帕,可以使用共享鎖。如果當(dāng)前事務(wù)需要修改查詢到的記錄,不能使用共享鎖是嗜,因?yàn)槠渌聞?wù)可能也會占用共享鎖而導(dǎo)致當(dāng)前事務(wù)無法修改愈案。這種場景需要使用for update。
這兩種鎖在使用過程中都需要即使釋放鹅搪,否則后續(xù)的相關(guān)操作都會被堵塞站绪。