Si vous définissez le niveau d'isolement des transactions sur SERIALIZABLE
, InnoDB
ajoutera implicitement LOCK IN SHARE MODE
à tous SELECT
déclarations.
Ce mode est en conflit avec les verrous placés par SELECT FOR UPDATE
et le SELECT
s se verrouille.
Notez cependant que InnoDB
peut verrouiller plus de lignes que ne satisfait le WHERE
état. C'est parce qu'il verrouille toutes les lignes scannées , pas seulement celles correspondantes .
Supposons que vous ayez un index sur col1
et cette requête :
SELECT *
FROM mytable
WHERE col1 = 1
AND col2 = 2
FOR UPDATE
utilise cet index.
Cela verrouillera tous enregistrements avec col1 = 1
, même ceux avec col2 <> 2