Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment verrouiller délibérément une ligne MySQL de sorte que même SELECT renverra une erreur ?

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