1. 程式人生 > >資料庫鎖機制2-------排它鎖

資料庫鎖機制2-------排它鎖

排它鎖:

什麼是排它鎖:其他事務對該資源既不能讀也不能改,排它鎖獨佔資源

example 1: (假設id是連續增長的)

req1:update tabletast set .... where id >10

req2:update tabletast set .... where id <10

若req1先到達,給表id大於10的資料加上排他鎖,這時req2到達要給id小於10 的資料加上排它鎖,雖然req1並沒有釋放資源,但是兩者鎖的資源不衝突,所以req2不會被阻塞。

example 2: (假設id是連續增長的)

req1:update tabletast set .... where id >20

req2:update tabletast set .... where id <10

若req1先到達,給表id大於20的資料加上排他鎖,這時req2到達要給id小於10 的資料加上排它鎖,這時req2會被阻塞,只能等req1釋放排它鎖,req2才能加上排它鎖。說明同一資源只能有一個排它鎖。

example 3: (假設id是連續增長的)

req1:

開啟事務

select *  from tabletest 

update tabletest set .... 

req2:

開啟事務

select *  from tabletest 

update tabletest set .... 

若req1和req2同時到達 第一句,都給該表加上共享鎖,該表已存在兩個共享鎖,這時不會出現阻塞狀況。當req1和req2都開始執行第二句時,都想升級為排他鎖,這時事務沒結束,req1和req2的共享鎖還沒釋放,req1想升級為排它鎖,等待req2共享鎖的釋放,req2也想升級為排它鎖,等待req1共享鎖的釋放,形成了死鎖!