MySQL高級知識(十五)——MySQL鎖機制分類

此博客的內容主要來源於尚硅谷的視頻中,在此記錄,以備以後自己查看。

1. 定義

  • 鎖是計算機協調多個進程或線程併發訪問某一資源的機制。

  • 在數據庫中,除了傳統的計算資源(如CPU、RAM、I/O等)的爭用以外,數據也是一種供許多用戶共享的資源。如何保證數據併發訪問的一致性、有效性是所有數據庫必須解決的一個問題,鎖衝突也是影響數據庫併發訪問性能的一個重要因素。從這個角度來說,鎖對數據庫而言顯得尤其重要,也更加複雜。

2. 事例

打個比方,我們到淘寶上買一件商品,商品只有一件庫存,這個時候如果還有另一個人買,
那麼如何解決是你買到還是另一個人買到的問題?
在這裏插入圖片描述

這裏肯定要用到事務,我們先從庫存表中取出物品數量,然後插入訂單,付款後插入付款表信息,
然後更新商品數量。在這個過程中,使用鎖可以對有限的資源進行保護,解決隔離和併發的矛盾。

3. 鎖的分類

鎖有兩種分類的分法,一種是對數據操作的類型分,一種是對數據操作的粒度分。

3.1. 對數據操作的類型(讀/寫)分

  1. 讀鎖(共享鎖):針對同一份數據,多個讀操作可以同時進行而不會互相影響。

  2. 寫鎖(排他鎖):當前寫操作沒有完成之前,它會阻斷其他寫鎖和讀鎖。

3.2. 對數據操作的細粒度分

  1. 表級鎖:開銷小,加鎖快;不會出現死鎖;鎖定粒度大,發生鎖衝突的概率最高,併發度最低。

  2. 行級鎖:開銷大,加鎖慢;會出現死鎖;鎖定粒度最小,發生鎖衝突的概率最低,併發度也最高。

  3. 頁面鎖:開銷和加鎖時間界於表鎖和行鎖之間;會出現死鎖;鎖定粒度界於表鎖和行鎖之間,併發度一般

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