MySQL : verrouiller un enregistrement - SQL/NoSQL - Programmation
Marsh Posté le 10-10-2006 à 17:17:47
Désolé pour la pollution : je viens de trouver !!! :$
SELECT ....... FOR UPDATE
En espérant que ça puisse servir à quelqu'un !!!
Marsh Posté le 12-01-2009 à 22:53:09
Merci moi ça m'interesse.
Mais pour l'utiliser j'ai un doute :
Soit ma table employé sur la quelle je voudrais modifier la personne id=12, mais pendant la modification je voudrais bloquer cet enregistrement pour éviter qu'un autre utilisateur vienne le modifier.
Je fais comment pour le bloquer ? blocage en lecture, en écriture ou les deux ?
Que ce passe t-il si un autre utilisateur voudrait le modifier en meme temps ?
Faut-il faire une boucle jusqu'a ce que je termine ma modification et que je laisse l'enregistrement libre ? -> Comment ?
Enfin comment débloquer mon enregistrement ?
D'avance merci
Marsh Posté le 13-01-2009 à 11:24:37
A lire : l'explication sur le système de verrou avec les tables INNODB : (en anglais) (en français) et tout particulièrement le récapitulatif des différentes situations où un verrou est posé par mysql sur les tables INNODB (en anglais) (en français) et le fonctionnement des verrous en écriture sur les tables INNODB (en anglais) (en français)
A noter qu'avec MYSQL < 6.x, seules les tables INNODB disposent d'un verrou d'index (et non pas de ligne) Les autres types de tables ne proposent que le verrou de table entière.
Marsh Posté le 13-01-2009 à 21:17:19
Ce système permet de bloqué incrémentation d'un index ? ou n'importe quel index de ma table ?
Marsh Posté le 13-01-2009 à 22:55:32
Est-ce que ça serait pas plus simple de créer à la volée une séquence chaque mois s'il elle n'existe pas déjà ?
Marsh Posté le 14-01-2009 à 00:25:04
Pour le moment, je n'ai pas bien compris l'impact des verrous innodb quand on met un verrou avec une connexion et qu'on insère des données avec des données avant d'avoir enlevé le verrou. je n'ai pas assez testé ce scénario là.
Par contre, comme expliqué dans la documentation, le verrou innodb verrouille toutes les lignes indiqué dans l'index utilisé pour la requête. Il peut donc verrouiller plus de lignes que nécessaire.
Par exemple si tu fais comme requête "select * from matable where col1=10 et col2<5" et que le seul index de la table porte sur col1 alors toutes les lignes dont col1 seront verrouillé même celles dont la valeur de col2 est supérieure à 5.
Si le verrou était de type "verrou de ligne", seule les lignes retourné à la fin de la requête auraient étaient verrouillé.
Marsh Posté le 10-10-2006 à 17:08:33
Bonjour,
Je souhaite verrouiller un enregistrement dans une table quand je le charge, pour que personne d'autre que moi ne puisse le modifier/supprimer tant que je ne l'ai pas libéré. Comment dois-je m'y prendre ?
Je n'ai trouvé que "LOCK TABLES", mais ça semble bloquer toute la table, alors que je ne veux verrouiller qu'un seul enregistrement.
Merci !!!