Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/05/2007, 16h45   #1
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 1
Points : 1
Par défaut Verrouiller d'un enregistrement lors de sa consultation

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
natalii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 16h17   #2
Membre habitué
 
Avatar de giltonic
 
Inscription : juillet 2002
Messages : 109
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : juillet 2002
Messages : 109
Points : 124
Points : 124
Citation:
Envoyé par natalii
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

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.
giltonic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2007, 17h07   #3
Membre habitué
 
Inscription : février 2004
Messages : 161
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : février 2004
Messages : 161
Points : 114
Points : 114
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...
eowene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2007, 09h23   #4
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 1
Points : 1
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
natalii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2007, 09h54   #5
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 14h23   #6
Invité de passage
 
Inscription : mai 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 3
Points : 1
Points : 1
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
natalii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2007, 14h56   #7
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
Oui, c'est normal avec InnoDB qui fonctionne de ce point de vue là comme Oracle: par défaut le SELECT n'a pas besoin de prendre de verrou sur les lignes des tables concernées.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h19.


 
 
 
 
Partenaires

Hébergement Web