可重復讀級別下的鎖的基本規則


以下均針對可重復讀級別下的鎖規則。

具體案例參考 極客時間 - MySQL實戰45講 - 21 | 為什么我只改一行的語句,鎖這么多?

原則 1:加鎖的基本單位是 next-key lock(間隙鎖+行鎖)。next-key lock 是前開后閉區間。

原則 2:查找過程中訪問到的對象才會加鎖。

優化 1:索引上的等值查詢,給唯一索引加鎖的時候,next-key lock 退化為行鎖。

優化 2:索引上的等值查詢,向右遍歷時且最后一個值不滿足等值條件的時候,next-key lock 退化為間隙鎖。

一個 bug:唯一索引上的范圍查詢會訪問到不滿足條件的第一個值為止。(現已修復)

又可以歸納為:

  • 查找過程中訪問到的對象才會加鎖,加鎖的基本單位是next-key lock(前開后閉的區間)。
  • 等值查詢:唯一索引會優化成行鎖;非唯一索引會向右遍歷時且最后一個值不滿足等值條件的時候,next-key lock 退化為間隙鎖。
  • 范圍查詢:無論是否是唯一索引,范圍查詢都需要訪問到不滿足條件的第一個值為止。

同時要注意lock in share mode(共享鎖,讀鎖)與for update(獨占鎖,寫鎖)的區別。

共享鎖:只會加在對應的索引上。

獨占鎖:對應的索引上,和對應的主鍵索引上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM