IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Verrouiller d'un enregistrement lors de sa consultation


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    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

  2. #2
    Membre habitué Avatar de giltonic
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 109
    Points : 137
    Points
    137
    Par défaut
    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.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Février 2004
    Messages : 161
    Points : 142
    Points
    142
    Par défaut
    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...

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    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

  5. #5
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    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.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    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

  7. #7
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 09/05/2008, 17h35
  2. Réponses: 4
    Dernier message: 29/03/2007, 12h02
  3. [PDF] Fichier modifiable lors d'une consultation
    Par etmim dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 08/03/2007, 15h01
  4. Verrouiller un enregistrement lors d'un select
    Par RamDevTeam dans le forum Bases de données
    Réponses: 5
    Dernier message: 01/11/2005, 17h20
  5. retrouver enregistrement lors de la saisie
    Par jdvroum dans le forum Access
    Réponses: 1
    Dernier message: 16/09/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo