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