數據庫的鎖

在數據庫中有兩種基本的鎖類型:
排它鎖(Exclusive Locks,即X鎖)和共享鎖(Share Locks,即S鎖)。
當數據對象被加上排它鎖時,其他的事務不能對它讀取和修改。
加了共享鎖的數據對象可以被其他事務讀取,但不能修改。

數據庫利用這兩種基本的鎖類型來對數據庫的事務進行併發控制。


根據保護的對象不同,Oracle數據庫鎖可以分爲以下幾大類:
DML鎖(data locks,數據鎖),
用於保護數據的完整性;
DDL鎖(dictionary locks,字典鎖),
用於保護數據庫對象的結構,如表、索引等的結構定義;


在我們實際應用開發中涉及較多的是DML鎖,其他兩種的話DBA會更加關心點;
DML鎖的目的在於保證併發情況下的數據完整性,
主要包括TM鎖和TX鎖,其中TM鎖稱爲表級鎖,TX鎖稱爲事務鎖或行級鎖。

參考http://zhidao.baidu.com/link?url=-MqhplcsaZoWog2TSLWbv7rTh6l-EfqvZZMOymNdDBZmypkoN9f-WAbLvHNgiS3lilu4y6QQSbcHowIGqrjuea


=============================================================

悲觀鎖(Pessimistic Lock),
顧名思義,就是很悲觀,每次去拿數據的時候都認爲別人會修改,
所以每次在拿數據的時候都會上鎖,
這樣別人想拿這個數據就會block直到它拿到鎖。
傳統的關係型數據庫裏邊就用到了很多這種鎖機制,
比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。


樂觀鎖(Optimistic Lock),
顧名思義,就是很樂觀,每次去拿數據的時候都認爲別人不會修改,
所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,
可以使用版本號等機制。樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量,
像數據庫如果提供類似於write_condition機制的其實都是提供的樂觀鎖。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章