Se imposti il livello di isolamento della transazione su SERIALIZABLE
, InnoDB
wil aggiungerà implicitamente LOCK IN SHARE MODE
a tutti i SELECT
dichiarazioni.
Questa modalità è in conflitto con i blocchi posti da SELECT FOR UPDATE
e il SELECT
s si bloccherà.
Nota, però, che InnoDB
può bloccare più righe di quelle che soddisfano il WHERE
condizione. Questo perché blocca tutte le righe scansionate , non solo quelli corrispondenti .
Supponiamo di avere un indice su col1
e questa domanda:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
utilizza questo indice.
Questo bloccherà tutto record con col1 = 1
, anche quelli con col2 <> 2