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

MySQL Discussion :

Problème à l'insertion de 224 lignes


Sujet :

MySQL

  1. #1
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut Problème à l'insertion de 224 lignes
    Salut à tous,

    J'ai le problème suivant :

    J'ai ma table Liste qui lie les tables controle et campagne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    create table Liste (
      co varchar(8) not null,
      ca varchar(7) not null,
      constraint primary key pk_Ls (co, ca)
    ) engine = innodb;
    alter table ListeControles
    add constraint foreign key (co) references Co(codeCo),
    add constraint foreign key (ca) references Ca(codeCa);
    Je tente d'insérer 224 lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into dqm.Liste (co, ca) values
    ("R****","R****"),
    ("A*****","A**"),
    ("A*****","A**"),
    ("C******","C******"),
    ...
    A l'exécution j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cannot add or update a child row: a foreign key fails
    Sachant que :
    les codes controle existent et sont au maximum de 8 caractères,
    que les campagnes existent aussi et font maximum 7 caractères,
    que je peux insérer chaque ligne de ListeControles une à une,
    et que j'ai inséré en une seule fois les 224 lignes de la table Controle...

    ... Vous diriez que le problème vient d'où?

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Et que vaut la dernière ligne de l'insertion ?

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je t'invite à faire le test suivant :

    1/ tu crées une variante de ta table sans les clefs étrangères :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE ListeControlesTest (
      controle varchar(8) NOT NULL,
      campagne varchar(7) NOT NULL,
      constraint PRIMARY KEY pk_LsCtrl (controle, campagne)
    ) engine = innodb;
    2/ tu fais ton insertion à l'identique, mais dans la table sans clefs étrangères

    3/ tu cherches les données qui violent l'intégrité référentielle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT T.controle 
    FROM ListeControlesTest T
      LEFT JOIN Controle R ON T.controle = R.CodeControle 
    WHERE R.CodeControle IS NULL;
     
    SELECT T.campagne 
    FROM ListeControlesTest T
      LEFT JOIN Campagne R ON T.campagne = R.CodeCamp
    WHERE R.CodeCamp IS NULL ;
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Membre actif Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Points : 229
    Points
    229
    Par défaut
    Ma dernière ligne d'insertion ressemeble à toutes les autres mis à part le ";" qui vient remplacer la "," pour terminer la requête. Merci quand même ced.

    Merci Antoun, le problème vient d'une occurence dans la table ca qui a son identifiant varchar(8) tronqué par le type du champ codeCa varchar(5). J'avais modifié manuellement cet identifiant erroné mais je n'avais pas modifié le type du champ, ma manipe n'avait donc servi à rien...

    Il s'agissait donc d'une violation de la contrainte d'intégrité foreign key references Ca(codeCa).

    Je retiens donc le procédé que tu m'as fait expérimenter pour faire face aux hostilités à venir.

    Et merci à tous!

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

Discussions similaires

  1. Problème à l'insertion d'une ligne
    Par ALEX731 dans le forum Hibernate
    Réponses: 2
    Dernier message: 12/02/2013, 17h13
  2. Réponses: 7
    Dernier message: 29/11/2012, 12h03
  3. Problème d'insertion de lignes dans une table MySql
    Par developppez dans le forum Windows Forms
    Réponses: 14
    Dernier message: 02/01/2009, 17h58
  4. Problème d'insertion de ligne
    Par bobie dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/08/2007, 13h25
  5. [Oracle] Problème d'insertion de ligne via JDBC
    Par nicofromChina dans le forum JDBC
    Réponses: 3
    Dernier message: 17/07/2007, 12h21

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