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 >>> |
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.4 Verrous de lecture SELECT ... FOR UPDATE et SELECT ... LOCK IN SHARE MODE
Une lecture cohérente n'est pas toujours pratique, dans certaines circonstances. Supposons que vous voulez ajouter une ligne dans votre table CHILD , et vous assurer que l'enfant a déjà un parent dans la table PARENT . Supposez que vous utilisiez une lecture cohérente, pour lire la table PARENT , et que vous découvrez le parent de l'enfant dans cette table. Pouvez vous ajouter tranquillement la ligne fille dans la table CHILD ? Non, car il peut arriver que durant ce temps, un autre utilisateur a effacé la ligne parente dans la table PARENT , et vous n'en êtes pas conscient.La solution est d'exécuter la commande SELECT en mode verrouillage, avec LOCK IN SHARE MODE .
Ici, LOCK IN SHARE MODE n'est pas une bonne solutionm, car si deux utilisateurs lisent le compteur en même temps, au moins l'un des deux sera bloqué lorsqu'il tentera de modifier le compteur. Dans ce cas, il y a deux bonnes méthodes pour implémenter la lecture et l'incrémentation du compteur : (1) modifiez le compteur d'une unité, et lisez le après cela ou (2) lisez le compteur d'abord, avec un verrou en mode FOR UPDATE , puis incrémentez le :
|
<< | Verrous de lecture SELECT ... FOR UPDATE et SELECT ... LOCK IN SHARE MODE | >> |
Lecture cohérente non-bloquante | Modèle de transactions et verrouillage InnoDB | Verrou de clé suivante : éviter le problème des lignes fantômes |