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