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

Langage SQL Discussion :

[MySQL] Probleme d'insertion, AUTO_INCREMENT et clés étrangère :s


Sujet :

Langage SQL

  1. #1
    Membre éprouvé
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut [MySQL] Probleme d'insertion, AUTO_INCREMENT et clés étrangère :s
    Bonjours a tous

    Mon probleme est le suivant :

    J'ai une table "dossier" qui contient des infos sur un dossier,
    et une table "fichier" qui contient des infos sur un fichier.

    Ma table fichier ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    idFichier INTEGER(5) PRIMARY KEY AUTO_INCREMENT
    nomFichier VARCHAR(50),
    poidFichier INTEGER(10),
    idDossier INTEGER(10)
    et ma table dossier ressemble a cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    idDossier INTEGER(5)  PRIMARY KEY AUTO_INCREMENT
    nomDossier VARCHAR(50),
    droitsDossier INTEGER(3)
    Lorsque je veux inserer un fichier je doit donc connaitre l'identifiant du dossier qui le contient, or avec mon insert :
    INSERT INTO Dossier VALUES('','nom_dossier','droits');

    Je laisse le SGBD générer l'identifiant du dossier pour moi. Je ne connais donc pas l'identifiant du dossier que je viens d'inseré...comment insérer le fichier alors ?


    INSERT permet-il de "renvoyer" l'identifiant qu'il vient de créer avec le AUTO_INCREMENT ? Je pourrai alors faire mon insertion de fichier...


    J'ai pensé à ne pas utiliser d' AUTO_INCREMENT, et déterminer moi meme l'id du dossier, mais j'ai peur d'un probleme de concurrence, car plusieurs programme vont faire des insertions en meme temps...

    ps : J'ai simplifier un peu pour bien faire ressortir mon probleme, car en plus dans mon cas réel deux "dossiers" peuvent avoir le meme nom et meme droits, donc je ne peut pas faire un SELECT sur le nom + les droits du dossier après avoir d'insérer un dossier pour retrouver son id, puisqu'il peut en avoir 2 pareil...

  2. #2
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Merci de respecter les CONSEILS... à lire AVANT de POSTER SVP, et en particulier de nous indiquer sous quel SGBD vous travaillez
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Membre éprouvé
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    Merci de respecter les CONSEILS... à lire AVANT de POSTER SVP, et en particulier de nous indiquer sous quel SGBD vous travaillez
    Ma question traitant d'instruction de base je pensais qu'elle était valable sur tous les SGBD, dsl si ce n'est pas le cas
    Pour répondre a ta question je suis sous MySQL. J'aurai donc dû poser ma question dans la section qui lui est réservé alors, non ?

    Merci mymyma, pour ta réponse.
    Mais comme la dit Xo, elle ne gère pas la concurrence

    J'espere que quelqu'un va trouvé, perso j'ai tout essayer

  4. #4
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    slt...
    oui, sur le forum du mysql t´aurais eu ta reponse plus tot...

    pour ce que tu veut, il exite last_insert_id().


    http://www.developpez.net/forums/sho...last_insert_id

  5. #5
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    La gestion des auto-increment est commune à certains SGBD, pas à tous.

    Par contre, la récupération des valeurs de ces champs auto-incrementés est faite vis des fonctions, forcément spécifiques au SGBD en question.

    pour ton souci, cf la FAQ MySQL, et en particulier la rubrique 4.4 :
    4.4. Champs auto-incrémentés
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  6. #6
    Membre éprouvé
    Avatar de Fildz
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    En effet la solution était dans le FAQ mysql.
    Pour récupérer le nombre généré dans un champ AUTO_INCREMENT par une requête INSERT, on peut utiliser les méthodes suivantes :
    • La fonction mysql_insert_id() des API mysql C, PHP.
    • La fonction SQL LAST_INSERT_ID()
    NB : le nombre ainsi renvoyé est spécifique à la connexion en cours, il n'y a donc aucun risque qu'une insertion réalisée entre-temps par un autre utilisateur vienne fausser cette valeur.
    Je suis content de voir qu'une solution existe ! Mais, utilisant PEAR:: DB pour m'abstraire de la base de données, je suis deçus de voir que ce dernier ne supporte pas la fonction xxx_insert_id(). Je vais utiliser l'instruction SQL, mais je deviens maintenant dépendant de mysql.
    Mais bon, pour etre franc, c'est la deuxieme fois que je m'aperçois que je suis dépendant de mysql. Pour palier ça j'ai créé une classe, sorte de couche supérieur à PEAR:: DB qui prend en paramètre la BD, et qui me permettra de changer de BD sans trop de pb.

    a tous les personnes qui m'ont répondu,

    @+

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

Discussions similaires

  1. probleme d'insertion dans la base Mysql
    Par ensamania dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/07/2007, 11h49
  2. problem d'insertion d'une image dans BD Mysql
    Par taouja dans le forum JDBC
    Réponses: 8
    Dernier message: 26/04/2007, 18h53
  3. Problem d'insertion d'une image dans une base mysql
    Par taouja dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 26/04/2007, 15h31
  4. VB.net et mysql probleme d'insert
    Par kahya dans le forum Windows Forms
    Réponses: 1
    Dernier message: 28/10/2006, 01h47
  5. [HTML] Probleme d'insertion HTML dans une base de données MySQL
    Par tarzanjane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/09/2006, 12h12

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