MySQL のギャップロックとロック競合

  • REPEATABLE READ 分離レベルのときに
  • 一意にならないインデックスで更新・削除しようとするとギャップロックが発生し
  • これが複数同時になると、ロックが競合してデッドロックになる

対策としては操作対象が一意になるようにインデックスを設定する。