Verrous de lecture SELECT ... FOR UPDATE et SELECT ... LOCK IN SHARE MODE <<< |
Verrou de clé suivante : éviter le problème des lignes fantômes | Un exemple de lecture cohérente avec InnoDB >>> |
16.11 Modèle de transactions et verrouillage InnoDB 16 Tables InnoDB Manuel de Référence MySQL 4.1 : Version Française . InnoDB et AUTOCOMMIT . InnoDB et SET ... TRANSACTION ISOLATION LEVEL ... . Lecture cohérente non-bloquante . Verrous de lecture SELECT ... FOR UPDATE et SELECT ... LOCK IN SHARE MODE ->Verrou de clé suivante : éviter le problème des lignes fantômes . Un exemple de lecture cohérente avec InnoDB . Les verrous posés par différentes requêtes SQL avec InnoDB . Quand est-ce que MySQL valide ou annule implicitement une transaction? . Détection des blocages et annulation . Comment gérer les blocages de verrous? |
16.11.5 Verrou de clé suivante : éviter le problème des lignes fantômesAvec le verrouillage de ligne, InnoDB utilise un algorithme appelé le verrouillage de la clé suivante. InnoDB fait un verrouillage de telle sorte que lorsqu'il fait une recherche ou un scan d'index, il pose des verrous partagés ou exclusifs sur les lignes d'index qu'il rencontre. Par conséquent, les verrous de lignes sont plus exactement appelés des verrous d'index. Les verrous que InnoDB posent affectent aussi l'espace qui le sépare de la ligne suivante. Si un utilisateur a un verrou partagé ou exclusif sur une ligne L dans un index, alors un autre utilisateur ne peut faire d'insertion immédiatement avant la ligne L, dans l'ordre de l'index. Ce verrouillage est fait pour éviter le problème de la ligne fantôme. Supposons que je veuille lire et verrouiller tous les enfants ayant un identifiant supérieur à 100 dans la table CHILD , puis modifier certains champs des lignes ainsi identifiées :
Vous pouvez utiliser le verrouillage de la clé suivant pour implémenter des vérifications d'unicité dans votre application : si vous lisez des données en mode partagé, et que vous ne voyez pas de duplicata de la ligne que vous allez insérer, alors vous pouvez l'insérer sans problème, en sachant que le verrou de clé suivante va vous garantir que durant ce temps, personne ne pourra insérer de ligne, qui déboucherait sur un duplicata de la votre. Le verrou de clé suivante permet de verrouiller aussi la non-existence de ligne dans votre table. |
<< | Verrou de clé suivante : éviter le problème des lignes fantômes | >> |
Verrous de lecture SELECT ... FOR UPDATE et SELECT ... LOCK IN SHARE MODE | Modèle de transactions et verrouillage InnoDB | Un exemple de lecture cohérente avec InnoDB |