為了保證資料的完事性和一致性,資料庫系統採用鎖來實現事務的隔離性。各種大型資料庫採用的鎖基本理論是一致的,但在具體實現上各有差別。
從併發事務鎖定的關係上看,可以分為共享鎖定和獨佔鎖定。從鎖定的物件不同,一般可以分為表鎖定和行鎖定。
鎖共享鎖用於讀取資料操作,它是非獨佔的,允許其他事務同時讀取其鎖定的資源,但不允許其他事務更新它。
獨佔鎖也叫排他鎖,適用於修改資料的場合。它所鎖定的資源,其他事務不能讀取也不能修改。
當乙個事務訪問某種資料庫資源時,如果執行select
語句,必須先獲得共享鎖,如果執行
insert
、update
或delete
語句,必須獲得獨佔鎖,這些鎖用於鎖定被操作的資源。
當第二個事務也要訪問相同的資源時,如果執行select
語句,也必須先獲得共享鎖,如果執行
insert
、update
或delete
語句,也必須獲得獨佔鎖。此時根據已經旋轉在資源上的鎖的型別,來決定第二個事務應該等待第乙個事務解除對應資源的鎖定,還是可以立刻獲得鎖。
資源上已經放置的鎖
第二個事務進行讀操作
第二個事務進行更新操作
無立即獲得共享鎖
立即獲得獨佔鎖
共享鎖立即獲得共享鎖
等待第乙個事務解除共享鎖
獨佔鎖等待第乙個事務解除獨佔鎖
等待第乙個事務解除獨佔鎖
1共享鎖
1、加鎖的條件:當乙個事務執行
select
語句時,資料庫系統會為這個事務分配一把共享鎖,來鎖定被查詢的資料。
2、解鎖的條件:在預設情況下,資料被讀取後,資料庫系統立即解除共享鎖。例如,當乙個事務執行查詢「
select * from accounts
」語句時,資料庫系統首先鎖定第一行,讀取之後,解除對第一行的鎖定,然後鎖定第二行。這樣,在乙個事務讀操作過程中,允許其他事務同時更新
accounts
表中未鎖定的行。
3、與其他鎖的相容性:如果資料資源上放置了共享鎖,還能再放置共享鎖和更新鎖。
4、併發效能:具有良好的併發效能,當資料被放置共享鎖後,還可以再放置共享鎖或更新鎖。所以併發效能很好。
2獨佔鎖
1、加鎖的條件:當乙個事務執行
insert
、update
或delete
語句時,資料庫系統會自動對
sql語句操縱的資料資源使用獨佔鎖。如果該資料資源已經有其他鎖(任何鎖)存在時,就無法對其再放置獨佔鎖了。
2、解鎖的條件:獨佔鎖需要等到事務結束才能被解除。
3、相容性:獨佔鎖不能和其他鎖相容,如果資料資源上已經加了獨佔鎖,就不能再放置其他的鎖了。同樣,如果資料資源上已經放置了其他鎖,那麼也就不能再放置獨佔鎖了。
4、併發效能:不用說了,最差。只允許乙個事務訪問鎖定的資料,如果其他事務也需要訪問該資料,就必須等待,起到前乙個事務結束,解除了獨佔鎖,其他事務才有機會訪問該資料。
3更新鎖
更新鎖在的初始化階段用來鎖定可能要被修改的資源,這可以避免使用共享鎖造成的死鎖現象。例如,對於以下的update
語句:
update accounts set balance=900 where id=1
更新操作需要分兩步:
l 讀取accounts
表中id為1
的記錄。
l 執行更新操作。
如果在第一步使用共享鎖,再第二步把鎖公升級為獨佔鎖,就可能出現死鎖現象。例如:兩個事務都獲取了同一資料資源的共享鎖,然後都要把鎖公升級為獨佔鎖,但需要等待另乙個事務解除共享鎖才能公升級為獨佔鎖,這就造成了死鎖。
更新鎖有如下特徵:
l 加鎖的條件:當乙個事務執行update
語句時,資料庫系統會先為事務分配一把更新鎖。
l 解鎖的條件:當讀取資料完畢,執行更新操作時,會把更新鎖公升級為獨佔鎖。
l 與其他鎖的相容性:更新鎖與共享鎖是相容的,也就是說,乙個資源可以同時放置更新鎖和共享鎖,但是最多放置一把更新鎖。這樣,當多個事務更新相同的資料時,只有乙個事務能獲得更新鎖,然後再把更新鎖公升級為獨佔鎖,其他事務必須等到前乙個事務結束後,才能獲取得更新鎖,這就避免了死鎖。
l 併發效能:允許多個事務同時讀鎖定的資源,但不允許其他事務修改它。
資料庫鎖的基本原理
為了保證資料的完事性和一致性,資料庫系統採用鎖來實現事務的隔離性。各種大型資料庫採用的鎖基本理論是一致的,但在具體實現上各有差別。從併發事務鎖定的關係上看,可以分為共享鎖定和獨佔鎖定。從鎖定的物件不同,一般可以分為表鎖定和行鎖定。鎖共享鎖用於讀取資料操作,它是非獨佔的,允許其他事務同時讀取其鎖定的資...
資料庫鎖的基本原理
為了保證資料的完事性和一致性,資料庫系統採用鎖來實現事務的隔離性。各種大型資料庫採用的鎖基本理論是一致的,但在具體實現上各有差別。從併發事務鎖定的關係上看,可以分為共享鎖定和獨佔鎖定。從鎖定的物件不同,一般可以分為表鎖定和行鎖定。鎖共享鎖用於讀取資料操作,它是非獨佔的,允許其他事務同時讀取其鎖定的資...
資料庫鎖的基本原理
為了保證資料庫的完整性和一致性,資料庫系統採用鎖來實現事務的隔離性。各種大型資料庫採用的鎖基本理論是一致的,但在具體實現上各有差別。從併發事務鎖定的關係上看,可以分為共享鎖定和獨佔鎖定。從鎖定的物件不同,一般可以分為表鎖定和行鎖定。鎖 共享鎖用於讀取資料操作,它是非獨佔的,允許其他事務同時讀取其鎖定...