ギャップロック
InnoDBにおけるギャップロックは、存在しないレコード間の「隙間」をロックするための仕組み インデックス上の既存レコード間の空間に対して設定されるロック
https://scrapbox.io/files/68387927c10b966f19bfbfd5.png
(-∞, 10),(10, 20),(20, 30),(30, +∞)の範囲のギャップがロック対象
主な目的
同じトランザクション内で、複数回SELECT文を実行した際に、結果が変わらないように他のトランザクションによるレコードを追加をさせないため
インデックス種類別のギャップロック発生可能性
table:gap-lock
インデックス種類 ギャップロック発生 理由
PRIMARY KEY 低い レコードロックの発生がほとんど
ユニークインデックス やや低い 該当レコードがあればレコードロック、なければギャップロック
インデックスなし 激高い テーブルフルスキャンにより、全レコードがロック
Docs