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

Requêtes MySQL Discussion :

Lock Table ?


Sujet :

Requêtes MySQL

  1. #1
    000
    000 est déconnecté
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 36
    Points : 36
    Points
    36
    Par défaut Lock Table ?
    Je realise une application permettant à un utilisateur de passer des commandes de produits.
    J'ai donc deux tables 'commande' et 'achat'.
    Donc quand un utilisateur passe une commande une ligne est inserée dans la table 'commande' (phase 1),
    je recupere l'id de la ligne en faisant select max(id) from 'commande' (phase 2),
    et j' insere pour chaque produit acheté une ligne dans la table 'achat' avec un champ idcommande qui correspond à l'id de la table 'commande' recupéré durant la phase2 (phase 3) .

    Il risque donc d'avoir un probleme quand deux utilisateurs font une commande à un intervalle très cours. Le premier utilisateur risque de recuperer l'id du deuxieme utilisateur.
    Doit je donc utiliser LOCK TABLE ? ou bien y a til une autre solution ?

  2. #2
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Citation Envoyé par 000
    ou bien y a til une autre solution ?
    Oui la commande LAST_INSERT_ID()

    Manuel de référence MySQL 5.0 :: 24.2.13.3 Comment lire l'identifiant unique de la dernière ligne insérée

    Cet article de la documentation illustre ton cas. Certes, il s'agit de l'API C. Mais pour PHP, le fonctionnement est similaire avec cette fonction :
    mysql_insert_id -- Retourne l'identifiant généré par la dernière requête INSERT MySQL

  3. #3
    000
    000 est déconnecté
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    En fait, je peux utiliser la commande LAST_INSERT_ID() mais j'aurais toujours un probleme.
    Il faut que mes deux requetes de la phase 1 et 2 (ou bien la requete de la phase 1 et la commande LAST_INSERT_ID() qui correspondrait à la phase 2) se suivent. Il ne doit pas avoir une autre requete qui insere une ligne dans la table commande entre la phase 1 et 2.

  4. #4
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Non justement il n'y aura pas d'erreurs. Lit bien a documentation c'est expliqué

    au temps t= 0 , USER 1 insère la ligne avec l'id 1
    au temps t= 1 , USER 2 insère la ligne avec l'id 2
    au temps t= 2 , USER 1 lance la requête LAST_INSERT_ID. Il récupère un 1

    En fait last_insert_id retourne le dernier insert pour la connexion en cours

    Tout va bien.

    Cette fonction est conçue exactement pour gérer le cas que tu décris

  5. #5
    000
    000 est déconnecté
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 36
    Points : 36
    Points
    36
    Par défaut
    MERCI
    tu as raison, j'avais pas bien lu la documentation

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

Discussions similaires

  1. Lock table
    Par amelie6 dans le forum Oracle
    Réponses: 8
    Dernier message: 03/09/2011, 16h29
  2. LOCK TABLE WRITE qui bloque la lecture.
    Par renaudjuif dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 03/02/2007, 00h15
  3. [Hibernate] LOCK TABLE WRITE ?
    Par n!co dans le forum Hibernate
    Réponses: 11
    Dernier message: 22/01/2007, 13h12
  4. syntaxe de lock tables
    Par pas30 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 31/12/2006, 00h54
  5. LOCK TABLES et TRUNCATE TABLE
    Par killy-kun dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/08/2005, 15h52

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