鎖的粒度就是指鎖的生效范圍,就是說(shuō)是行鎖,還是頁(yè)鎖,還是整表鎖. 鎖的粒度同樣既可以由數(shù)據(jù)庫(kù)自動(dòng)管理,也可以通過(guò)手工指定hint來(lái)管理。
例17:
----------------------------------------
T1: select * from table (paglock)
T2: update table set column1='hello' where id>10
T1執(zhí)行時(shí),會(huì)先對(duì)第一頁(yè)加鎖,讀完第一頁(yè)后,釋放鎖,再對(duì)第二頁(yè)加鎖,依此類推。假設(shè)前10行記錄恰好是一頁(yè)(當(dāng)然,一般不可能
一頁(yè)只有10行記錄),那么T1執(zhí)行到第一頁(yè)查詢時(shí),并不會(huì)阻塞T2的更新。
例18:
----------------------------------------
T1: select * from table (rowlock)
T2: update table set column1='hello' where id=10
T1執(zhí)行時(shí),對(duì)每行加共享鎖,讀取,然后釋放,再對(duì)下一行加鎖;T2執(zhí)行時(shí),會(huì)對(duì)id=10的那一行試圖加鎖,只要該行沒(méi)有被T1加上行鎖,
T2就可以順利執(zhí)行update操作。
例19:
----------------------------------------
T1: select * from table (tablock)
T2: update table set column1='hello' where id = 10
T1執(zhí)行,對(duì)整個(gè)表加共享鎖. T1必須完全查詢完,T2才可以允許加鎖,并開(kāi)始更新。
以上3例是手工指定鎖的粒度,也可以通過(guò)設(shè)定事物隔離級(jí)別,讓數(shù)據(jù)庫(kù)自動(dòng)設(shè)置鎖的粒度。不同的事物隔離級(jí)別,數(shù)據(jù)庫(kù)會(huì)有不同的
加鎖策略(比如加什么類型的鎖,加什么粒度的鎖)。具體請(qǐng)查聯(lián)機(jī)手冊(cè)。