Om du ställer in transaktionsisoleringsnivån till SERIALIZABLE , InnoDB wil implicit lägga till LOCK IN SHARE MODE till alla SELECT uttalanden.
Detta läge är i konflikt med låsen som placeras av SELECT FOR UPDATE och SELECT s kommer att låsa.
Observera dock att InnoDB kan låsa fler rader än vad som uppfyller WHERE tillstånd. Detta beror på att det låser alla skannade rader , inte bara de matchade .
Säg att du har ett index på col1 och denna fråga:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
använder detta index.
Detta låser alla poster med col1 = 1 , även de med col2 <> 2