【問答分享第一彈】MySQL鎖總結:MySQL行鎖、表鎖、排他鎖、共享鎖的特點

終端研發部發表於2021-07-09

大家好,我是小於哥哈。前幾天能分享了第一期面試題,MySQL 中有哪幾種鎖 和 這些鎖各有哪些特點 ,這道面試題是經常會被問到的一個面試題,大家反饋的都挺不錯的。今天特此來總結一下。

首發於公眾號【終端研發部】

核心

Mysql鎖機制,分為哪些鎖,有什麼樣的特點?

目標

  • 鎖的分類
  • 鎖的特點
  • 鎖的應用場景

事務併發帶來的問題與解決方案

補充

1.髒讀:一個事務可以讀取到另一個事務未提交的資料。如下圖:

解決髒讀:修改資料時加上寫鎖

不可重複讀:在一個事務中不同時間段查詢出現不同的結果,可能被更新可能被刪除。如下圖

解決不可重複讀:事務A第一次讀資料時加上讀鎖,事務B不能修改,會阻塞。

3.幻讀:在一個事務中不同時間段查詢,記錄數不同。與不可重複讀的區別是:在幻讀中,已經讀取的資料不會改變,只是與以前相比,會有更多的資料滿足查詢條件。如下圖:

解決幻讀:事務A範圍查詢時加上臨鍵鎖,鎖住相鄰區間,事務B不能插入到被鎖住的區間,防止幻讀。

答案揭曉

按鎖粒度分類:

  • 1、行級鎖
  • 2、表級鎖
  • 3、頁級鎖

解釋:

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

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

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

按照鎖級別分類 :

  • 1、共享鎖
  • 2、排他鎖
  • 3、意向鎖

解釋:

1、共享鎖:一旦上鎖,任何事務(包括當前事務)無法對其修改,其他事務可以併發讀取資料,也可在對此資料再加共享鎖

2、排他鎖(獨佔鎖):如果事務對資料A加上排他鎖後,則其他事務不可併發讀取資料,也不能再對A加任何型別的鎖。獲准排他鎖的事務既能讀資料,又能修改資料。

3、意向鎖: 分為意向共享鎖和意向排他鎖,特點: 意向鎖是InnoDB自動加的,不需要使用者干預。

ps: 如何學習java ,推薦兩個白嫖學習的資料:

1、書籍:

codeGoogler/ProgramBooks

2:視訊教程:

全網免費Java資源下載SpringBoot、Spring、Mybatis、Redis、RabbitMQ、SpringCloud、高併發(持續更新)_這個時代,作為程式設計師可能要學習小程式-CSDN部落格

最後

最後,照舊安利一波我們的工種號:「終端研發部」,目前每天都會推薦一篇優質的技術相關的文章,主要分享java相關的技術與面試技巧,我們的目標是:知道是什麼,為什麼,打好基礎,做好每一點!這個主創技術公眾號超級值得大家關注。

如果你有什麼技術上的問題,都可以諮詢我,技術路上漫長而優雅, 於哥可以一直陪伴。如果有幫助,歡迎點贊!

相關文章