|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mai 2007 Messages : 3 ![]() |
Bonjour,
A peine inscrite et déjà en train de poser des questions... Je souhaiterai verrouiller un enregistrement avec un select : quand un utilisateur X consulte une fiche produit, si l'utilisateur Y veut accéder à la même fiche produit il ne doit pas pouvoir la consulter. J'ai vu des fonctions comme GET_LOCK mais je ne sais pas si c'est le soleil ou moi mais je n'ai pas tout saisi. Faut-il que je reste avec le même type de base avec des GET_LOCK ou passer dans une base de type InnoDB ? en clair je suis un peu perdue Douce journée à tous |
|
|
00
|
|
|
#2 | |
|
Membre habitué
![]() Inscription : juillet 2002 Messages : 109 ![]() |
Citation:
1) Quel est le langage de programmation ? 2) un SELECT ne fait que selectionner un enregistrement (aucune modif). Mais suivant le langage de programmation par exemple en Delphi un Objet 'Query' peut a la fois etre un "SELECT" et faire des mises à jour... suivant ses propriétés. 3) personnellement mes verrouillages sont au niveau logiciel. C'est a dire que je pose dans une table : "qui est connecté" et "ce qu'il est en train de faire". si un deuxième utilisateur veut modifier le meme enregistrement alors verouillage du logiciel... ca dit qu'un autre utilisateur est en train de travailler dessus... 4) Les LOCK TABLE, j'evite car ma première expérence avec ces trucs a été malheureuse (j'ai pété la base en beauté). j'ai du surment faire une fausse manip, mais j'ai pas voulu renouvellé l'expérience. |
|
|
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : février 2004 Messages : 161 ![]() |
Je pense, comme giltonic, qu'il vaudrait mieux faire ça au niveau logiciel.
Tu peux, par exemple ajouter un champ dans ta table : "modif". Quand l'utilisateur 1 ouvre la page de modification, tu met modif à 1 et quand il la ferme, tu met modif à 0. Si un utilisateur 2 se connecte pour modifier, tu vérifie l'état de ton champ "modif". Dis nous en plus si tu veux de l'aide... |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : mai 2007 Messages : 3 ![]() |
Bonjour,
Les scripts sont en php. Mon problème avec le contrôle logiciel vient du fait que si l'utilisateur perd sa session ou arrête son navigateur, l'enregistrement qu'il consultait restera à l'état verrouillé, et les utilisateurs auront besoin de l'intervention d'un technicien pour pouvoir continuer à travailler. C'est pour cela que je cherchais d'autres solutions. Merci sincèrement pour vos réponses car je commençai devenir dingue Je suis en train de regarder si postgres pourrait m'aider... Douce journée à tous |
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Si vous utilisez InnoDB comme moteur de stockage, vous pouvez verrouiller une ligne dans une table avec la clause FOR UPDATE de l'instruction SELECT. En général, il vaut mieux utiliser le verrouillage de données dans la base que le recoder dans une application.
L'utilisation de la variable MySQL wait_timeout qui définit le nombre maximal de secondes d'inactivité d'une connexion MySQL avant de la fermer devrait permettre de libérer automatiquement les verrous d'une connexion qui n'a plus de client. |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : mai 2007 Messages : 3 ![]() |
Bonjour,
J'ai essayé de faire un select avec FOR UPDATE mais j'arrive avec une autre connexion à faire un select sur le même enregistrement. Est-ce normal sachant que je suis bien avec une table de type innodb ? Douce journée |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com