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