トランザクション分離レベルをSERIALIZABLEに設定した場合 、InnoDB 暗黙的にLOCK IN SHARE MODEを追加します すべてのSELECTに ステートメント。
このモードは、SELECT FOR UPDATEによって設定されたロックと競合します およびSELECT sはロックされます。
ただし、InnoDB WHEREを満たすよりも多くの行をロックする可能性があります 調子。これは、スキャンされたすべての行をロックするためです。 、一致しただけではありません 。
たとえば、col1にインデックスがあります そしてこのクエリ:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
このインデックスを使用します。
これにより、すべてがロックされます col1 = 1のレコード 、col2 <> 2の場合でも