Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como bloquear deliberadamente uma linha do MySQL de modo que mesmo SELECT retorne um erro?


Se você definir o nível de isolamento da transação como SERIALIZABLE , InnoDB vai anexar implicitamente LOCK IN SHARE MODE para todos os SELECT declarações.

Este modo entra em conflito com os bloqueios colocados por SELECT FOR UPDATE e o SELECT s irá bloquear.

Observe, porém, que InnoDB pode bloquear mais linhas do que satisfazer o WHERE doença. Isso ocorre porque bloqueia todas as linhas digitalizadas , não apenas aqueles correspondidos .

Digamos que você tenha um índice em col1 e esta consulta:
SELECT  *
FROM    mytable
WHERE   col1 = 1
        AND col2 = 2
FOR UPDATE

usa este índice.

Isso bloqueará todos registros com col1 = 1 , mesmo aqueles com col2 <> 2