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