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

PHP & Base de données Discussion :

Insertion dans base avec une clé étrangère [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut Insertion dans base avec une clé étrangère
    Bonjour,

    Mon problème peux paraitre tout bête mais je ne comprend pas mon erreur... J'ai 2 tables :

    Utilisateur => qui contient un id_utilisateur et un nom
    Configuration qui contient => qui contient un id_configuration et un id_utilisateur

    Dans ma table utilisateur, j'ai la donnée suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <id_utilisateur> <nom>
    <1> <utilisateur1>
    <2> <utilisateur2>
    J'ai également une clé étrangère de type 1,n qui lie id_utilisateur des deux tables

    Mais lorsque j’essaie d'ajouter une nouvelle configuration j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cannot add or update a child row: a foreign key constraint fails (`newprodfh`.`configuration`, CONSTRAINT `fk_configuration_utilisateur` FOREIGN KEY (`id_utilisateur`) REFERENCES `utilisateur` (`id_utilisateur`) ON DELETE NO ACTION ON UPDATE NO ACTION) QMYSQL: Unable to execute query"
    ma requette ressemble a ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO configuration (id_utilisateur) VALUES (1)
    Donc la je suis un peu perdu car ma table utilisateur possède bien un id_utilisteur = 1 donc je ne comprend pas pourquoi il refuse cet ajout.

    Quelqu'un a une idée ?

    Merci
    J'aime pas les épinards... Mais alors pas du tout

  2. #2
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Utilisateur => qui contient un id_utilisateur et un nom
    Configuration qui contient => qui contient un id_configuration et un id_utilisateur
    Je suppose que les 2 champs sont de même type ?
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  3. #3
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Oui ce sont tous les deux des INT(10) non signés non null
    Après, dans ma table utilisateur, l'id_utilisateur est bien evidement en clé primaire, auto incrémenté, unique mais j'imagine que c'est pas de là que viens mon souci :/
    J'aime pas les épinards... Mais alors pas du tout

  4. #4
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Y avait-il déjà des enregistrements existants dans la table configuration
    avant la mise en place de la clé étrangère ?

    Peut-on avoir le résultat de cette requête (affichage des contraintes)
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from information_schema.KEY_COLUMN_USAGE where `TABLE_NAME` = 'Configuration'
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  5. #5
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Non je n'avais pas d'enregistrements et j'ai tout de même fait un truncate table ... au cas ou...

    Sinon j'ai executer ta requette et ai obtenu ca (pas tres lisible c'est un csv :/) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CONSTRAINT_CATALOG,CONSTRAINT_SCHEMA,CONSTRAINT_NAME,TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,ORDINAL_POSITION,POSITION_IN_UNIQUE_CONSTRAINT,REFERENCED_TABLE_SCHEMA,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME
    def,newprodfh,PRIMARY,def,newprodfh,configuration,id_configuration,1,NULL,NULL,NULL,NULL
    def,newprodfh,id_configuration_UNIQUE,def,newprodfh,configuration,id_configuration,1,NULL,NULL,NULL,NULL
    def,newprodfh,fk_configuration_pays,def,newprodfh,configuration,id_pays_defaut,1,1,newprodfh,pays,id_pays
    def,newprodfh,fk_configuration_utilisateur,def,newprodfh,configuration,id_utilisateur,1,1,newprodfh,utilisateur,id_utilisateur
    A vu de nez ça à l'ai bon pour moi... ma table configuration est aussi liée à une table pays qui apparait ici mais bon ... celle ci ne pose pas de souci apparemment.
    J'aime pas les épinards... Mais alors pas du tout

  6. #6
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Et l'id_configuration est aussi auto-incrémenté ?

    Et justement en essayant d'insérer dans la configuration un utilisateur existant et un code pays existant pour être clean,
    ça donne quoi ?
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  7. #7
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Oui mon id_configuration est aussi auto incrémenté

    La requette que j'ai donné est version simplifiée de ma requette normal qui contient 4 champs dont l'id_pays.
    Dans mon code j'ajoute bien tous les champs dans la même requette et j'ai le même message d'erreur.

    Je vais tester de virer la contrainte pour voir si le lien est OK sans ça histoire d'être certain que je lie bien à un id_utilisateur existant. Je l'ai déjà vérifié mais bon... j'ai pas d'autres idées.
    J'aime pas les épinards... Mais alors pas du tout

  8. #8
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Bon ...
    Sinon si ça peut aider ou faire avancer ...
    Essayer des insert into ... avec select : ce genre quoi ...

    INSERT INTO MyTable (PriKey, Description)
    SELECT ForeignKey, Description
    FROM SomeView;
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  9. #9
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    J'ai essayer en virant la contrainte et tout fonctionne très bien, le lien existe bien etc...

    J'ai remis la contrainte et tenter un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO configuration (id_pays_defaut, id_utilisateur) 
     SELECT 1, id_utilisateur
      FROM utilisateur 
       WHERE id_utilisateur=1
    Et il me sort la même erreur :/

    J'ai également virer pu recréer un nouvelle contrainte au cas ou ... mais rien n'y fait

    Franchement là ...
    J'aime pas les épinards... Mais alors pas du tout

  10. #10
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Et cette requête ressort bien un enregistrement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 1, id_utilisateur
      FROM utilisateur 
       WHERE id_utilisateur=1
    Autres idées:

    1) passer ces requêtes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SHOW TABLE STATUS WHERE Name = 'configuration';
    SHOW TABLE STATUS WHERE Name = 'utilisateur';
    2) Après ... ce nom de contrainte est peut-être existant en base ? fk_configuration_utilisateur
    3) Essayer de recréer la table utilisateur en modifiant le nom du champ (id_utilisateur -> id_util ) pour voir ...
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  11. #11
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Désolé pour cette réponse un peu tardive mais j'ai du passer quelques jours sur un autre problème.

    Donc j'ai tenter la suppression de la table utilisateur, je l'ai ensuite recréer manuellement et là ... bah ça fonctionne. Va comprendre.

    Alors je sait que mon ancienne table utilisateur à été importé via une exportation créer depuis mysql workbench... peut être que ça à induit un bug quelque part... je ne sait pas.

    En tout cas maintenant ça fonctionne Merci pour tout !
    J'aime pas les épinards... Mais alors pas du tout

  12. #12
    Membre émérite Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Points : 2 286
    Points
    2 286
    Par défaut
    Pas de soucis !
    Merci pour le retour

    Bon démarrage de semaine
    Laurent
    Emérite, émérite je ne pense pas ... plutôt dans le développement depuis FORT FORT longtemps, c'est mon job, ça oui
    A part ça ... Il ne pleut jamais en Moselle !

  13. #13
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    Bon j'ouvre a nouveau le topic car j'ai le même souci sur une autre table et comme j'aime bien comprendre j'ai continuer de chercher et je suis tombé sur un truc qui pourrait faire avancer le problème :

    J'ai lancer la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    show engine innodb status
    et j'obtient ca :

    ------------------------
    LATEST FOREIGN KEY ERROR
    ------------------------
    170210 11:46:19 Transaction:
    TRANSACTION B8CB, ACTIVE 0 sec inserting
    mysql tables in use 1, locked 1
    5 lock struct(s), heap size 1248, 2 row lock(s), undo log entries 1
    MySQL thread id 3, OS thread handle 0x7fe1301f4700, query id 22385 192.168.1.112 dbuser update
    INSERT INTO facture( id_dossier, id_client, no_facture, nom_societe, civilite, nom, prenom, rue1, rue2, rue3, code_postal,ville, id_pays, total_ht, tva, total_ttc, designation_paiement, type_reglement, jour_relance, delai_paiement )
    VALUES (nan je vous le dirais pas)
    Foreign key constraint fails for table `newprodfh`.`facture`:
    ,
    CONSTRAINT `fk_facture_client` FOREIGN KEY (`id_client`) REFERENCES `client` (`id_client`) ON DELETE NO ACTION ON UPDATE NO ACTION
    Trying to add to index `fk_facture_client1_idx` tuple:
    DATA TUPLE: 2 fields;
    0: len 4; hex 00064697; asc F ;;
    1: len 4; hex 00000003; asc ;;

    But the parent table `newprodfh`.`client`
    or its .ibd file does not currently exist!
    Donc comme ma table client existe, j'en conclut que le fichier .ibd n'existe pas.
    Par contre je n'ai pas accès au dossier qui est sensé contenir ce fameux fichier .ibd donc je me demande si il n'existe pas une commande de maintenance pour vérifier ou réparer ça.
    J'aime pas les épinards... Mais alors pas du tout

  14. #14
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    J'ai en parti résolu mon problème YEAH !

    En fait ma table client utilise l'engine MyASM alors que les autres utilise l'engine InnoDB. Donc j'ai modifier l'engine sur ma table client et hop c'est résolu !

    Par contre je ne comprend pas pourquoi MYSQL Workbench a générer cette table ainsi. Je vais chercher dans les options de mon modèle mais pour l'instant je n'ai pas trouvé.
    J'aime pas les épinards... Mais alors pas du tout

  15. #15
    Membre averti Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Points : 412
    Points
    412
    Par défaut
    La réponse est ici :
    http://stackoverflow.com/questions/1...storage-engine

    Sujet re-résolu donc

    Merci encore
    J'aime pas les épinards... Mais alors pas du tout

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

Discussions similaires

  1. [MySQL] insertion dans deux tables avec une clé étrangère
    Par reseau.reseau dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 23/03/2014, 13h04
  2. [PDO] insertion dans base avec récupération d'id
    Par luminou49 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/03/2009, 13h46
  3. Réponses: 8
    Dernier message: 30/08/2006, 14h22
  4. insertion dans table avec plusieurs clés étrangères
    Par philippe281281 dans le forum Administration
    Réponses: 2
    Dernier message: 14/06/2006, 18h35
  5. [ADO.NET] Problème avec Insert dans base de données
    Par mpascolo dans le forum Accès aux données
    Réponses: 9
    Dernier message: 24/01/2005, 09h36

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