1. 程式人生 > >關系型數據庫(五),數據庫中的鎖

關系型數據庫(五),數據庫中的鎖

沒有 適用於 行鎖 悲觀鎖 info 實現 判斷 strong style

目錄

1.鎖的分類

2.共享鎖和排斥鎖

3.樂觀鎖與悲觀鎖

五、數據庫中的鎖

1.鎖的分類

技術分享圖片

2.共享鎖和排斥鎖

共享鎖(讀鎖)

排斥鎖(寫鎖)

技術分享圖片

3.樂觀鎖與悲觀鎖

1)悲觀鎖

總是假設最壞的情況,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞直到它拿到鎖(共享資源每次只給一個線程使用,其它線程阻塞,用完後再把資源轉讓給其它線程)。傳統的關系型數據庫裏邊就用到了很多這種鎖機制,比如行鎖,表鎖等,讀鎖,寫鎖等,都是在做操作之前先上鎖。JavasynchronizedReentrantLock等獨占鎖就是悲觀鎖思想的實現。

2)樂觀鎖

總是假設最好的情況,每次去拿數據的時候都認為別人不會修改,所以不會上鎖,但是在更新的時候會判斷一下在此期間別人有沒有去更新這個數據,可以使用版本號機制和CAS算法實現。樂觀鎖適用於多讀的應用類型,這樣可以提高吞吐量,像數據庫提供的類似於write_condition機制,其實都是提供的樂觀鎖。在Javajava.util.concurrent.atomic包下面的原子變量類就是使用了樂觀鎖的一種實現方式CAS實現的。

關系型數據庫(五),數據庫中的鎖