資料庫(3) 資料庫各種鎖機制

2021-10-04 02:25:46 字數 1466 閱讀 8310

鎖機制是資料庫乙個比較重要的機制,在處理事務的併發性方面起著至關重要的作用:悲觀鎖、樂觀鎖;共享鎖、排他鎖;行級鎖、表級鎖;另外還有讀鎖、寫鎖。

三個問題:

一、上面這些鎖都是什麼,怎麼定義的;

二、什麼鎖什麼場景下使用、怎麼使用;

三、這些鎖和事務之間是什麼關係。

樂觀鎖:顧名思義就是非常樂觀,非常相信真善美,每次去讀資料都認為其它事務沒有在寫資料,所以就不上鎖,快樂的讀取資料,而只在提交資料的時候判斷其它事務是否搞過這個資料了,如果搞過就rollback。

樂觀鎖相當於一種檢測衝突的手段,可通過為記錄新增版本或新增時間戳來實現。

悲觀鎖:對其它事務抱有保守的態度,每次去讀資料都認為其它事務想要作祟,所以每次讀資料的時候都會上鎖,直到取出資料。悲觀鎖大多數情況下依靠資料庫的鎖機制實現,以保證操作最大程度的獨占性,但隨之而來的是各種開銷。

悲觀鎖相當於一種避免衝突的手段。

選擇標準如果併發量不大,或資料衝突的後果不嚴重,則可以使用樂觀鎖;而如果併發量大或資料衝突後果比較嚴重(對使用者不友好),那麼就使用悲觀鎖。

**注意**:首先明確一點樂觀鎖和悲觀鎖是一種程式設計策略,並不是資料庫具有悲觀鎖和樂觀鎖。

共享鎖(s鎖,shared lock):也叫讀鎖(read lock),持有s鎖的事務唯讀不可寫。如果事務a對資料d加上s鎖後,其它事務只能對d加上s鎖而不能加x鎖。

排它鎖(x鎖,exclusive lock):也叫寫鎖(write lock),持有x鎖的事務可讀可寫。如果事務a對資料d加上x鎖後,其它事務不能再對d加任何鎖,直到a對d的鎖解除。

選擇標準:資料庫根據sql語句選擇加什麼鎖

如何使用:資料庫自身建立

表級鎖(table lock):表級鎖將整個表加鎖,效能開銷最小。使用者可以同時進行讀操作。當乙個使用者對錶進行寫操作時,使用者可以獲得乙個寫鎖,寫鎖禁止其他的使用者讀寫操作。寫鎖比讀鎖的優先順序更高,即使有讀操作已排在佇列中,乙個被申請的寫鎖仍可以排在所佇列的前列。

行級鎖(row lock):行級鎖僅對指定的記錄進行加鎖,這樣其它程序可以對同乙個表中的其它記錄進行讀寫操作行級鎖粒度最小,開銷大,能夠支援高併發,可能會出現死鎖

選擇標準:增刪改查帶有索引時用行鎖

如何使用:資料庫自行加鎖

參考來自:

資料庫鎖機制

這段時間由於開發專案,重新學習了資料庫的併發控制和鎖機制。資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否...

資料庫鎖機制

這段時間由於開發專案,重新學習了資料庫的併發控制和鎖機制。資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否...

資料庫鎖機制

資料庫就是通過鎖機制來解決併發問題的。主要就是兩種鎖,共享鎖和排他鎖 也叫獨佔鎖 在執行select語句的時候需要給操作物件 表或者一些記錄 加上共享鎖,但加鎖之前需要檢查是否有排他鎖,如果沒有,則可以加共享鎖 乙個物件上可以加n個共享鎖 否則不行。共享鎖通常在執行完select語句之後被釋放,當然...