sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo bloquear deliberadamente una fila de MySQL de modo que incluso SELECT devuelva un error?

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