InnoDB définit des types de verrous spécifiques comme suit.
-
SELECT ... FROM est une lecture cohérente, lisant un instantané de la base de données et ne définissant aucun verrou, sauf si le niveau d'isolement de la transaction est défini sur SERIALIZABLE. Pour le niveau SERIALIZABLE, la recherche définit des verrous de clé suivante partagés sur les enregistrements d'index qu'elle rencontre.
-
SELECT ... FROM ... LOCK IN SHARE MODE définit les verrous de clé suivante partagés sur tous les enregistrements d'index rencontrés par la recherche.
-
Pour les enregistrements d'index rencontrés par la recherche, SELECT ... FROM ... FOR UPDATE empêche les autres sessions d'effectuer SELECT ... FROM ... LOCK IN SHARE MODE ou de lire à certains niveaux d'isolement de transaction. Les lectures cohérentes ignoreront tous les verrous définis sur les enregistrements qui existent dans la vue de lecture.
-
UPDATE ... WHERE ... définit un verrou exclusif de clé suivante sur chaque enregistrement rencontré par la recherche.
-
SUPPRIMER DE... OÙ... définit un verrou de clé suivante exclusif sur chaque enregistrement rencontré par la recherche.
-
INSERT définit un verrou exclusif sur la ligne insérée. Ce verrou est un verrou d'enregistrement d'index, pas un verrou de clé suivante (c'est-à-dire qu'il n'y a pas de verrou d'espace) et n'empêche pas d'autres sessions de s'insérer dans l'espace avant la ligne insérée.
InnoDB dispose de plusieurs types de verrous au niveau des enregistrements :
-
Verrou d'enregistrement :il s'agit d'un verrou sur un enregistrement d'index.
-
Gap lock :il s'agit d'un verrou sur un espace entre les enregistrements d'index, ou d'un verrou sur l'espace avant le premier ou après le dernier enregistrement d'index.
-
Verrouillage de la touche suivante :il s'agit d'une combinaison d'un verrouillage d'enregistrement sur l'enregistrement d'index et d'un verrouillage d'espace sur l'espace avant l'enregistrement d'index.
En savoir plus :
Éviter le problème fantôme à l'aide du verrouillage par clé suivante