天天看點

MySQL-間隙鎖-加鎖規則

MySQL 後面的版本可能會改變加鎖政策,本文隻适用版本:

5.x 系列 <=5.7.24

8.0 系列 <=8.0.13

間隙鎖在可重複讀隔離級别下才有效,以下規則隻描述了間隙鎖:

原則 1:加鎖的基本機關是 next-key lock,next-key lock 是前開後閉區間

原則 2:查找過程中通路到的對象才會加鎖。這和鎖的普适概念,競争的資源才會加鎖同理

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

優化 2:索引上的等值查詢,向右周遊時一直走到最後一個值不滿足等值條件的時候,next-key lock 退化為間隙鎖;

換個描述:索引上的等值查詢,會加兩個間隙鎖,一個是标準的間隙鎖左開右閉區間,一個是退化後的間隙鎖左開右開區間;最終的效果就是鎖住等值這一行、上行開區間、下行開區間

一個 bug:唯一索引上的範圍查詢會通路到不滿足條件的第一個值為止

注意:以上的加鎖規則會同時命中多條,也就是會疊加;

next-key lock 和gap鎖的加鎖效果,注意這隻是加鎖效果,不是加鎖流程和規則:

MySQL-間隙鎖-加鎖規則