Si establece el nivel de aislamiento de transacciones en SERIALIZABLE
, InnoDB
agregará implícitamente LOCK IN SHARE MODE
a todos SELECT
declaraciones.
Este modo entra en conflicto con los bloqueos colocados por SELECT FOR UPDATE
y el SELECT
s se bloqueará.
Tenga en cuenta, sin embargo, que InnoDB
puede bloquear más filas que satisfacer el WHERE
condición. Esto se debe a que bloquea todas las filas escaneadas , no solo aquellos coincidencia .
Digamos que tienes un índice en col1
y esta consulta:
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
utiliza este índice.
Esto bloqueará todos registros con col1 = 1
, incluso aquellos con col2 <> 2