InnoDBで行ロック/テーブルロックになる条件
- ユニーク制約 or インデックス が貼られているカラムで検索した場合、行ロック
- それ以外 のカラムで検索した場合、テーブルロック
- インデックスの値によってロックされる=SCANされた行はすべてロックされる
- ロックには 排他ロック 共有ロック の2種類がある。
共有 (S) ロックでは、ロックを保持するトランザクションによる行の読み取りが許可されます。
排他 (X) ロックでは、ロックを保持するトランザクションによる行の更新または削除が許可されます。
そもそも、トランザクションの中で使うこと。
IN SHARE MODE と FOR UPDATE 読み取りによって設定されたロックは、トランザクションがコミットされたりロールバックされたりした時にリリースされます。