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 :

probleme clé étrangère


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut probleme clé étrangère
    Bonjour a tous , je débute avec mySQL et il y a une chose que je comprend pas.

    Je crée 2 tables: une avec la clé primaire id_livre (qui s'incremente automatiquement et une autre table avec une clé étrangère qui a pour référence la clé primaire (id_livre) de la première table.

    Ma question est la suivante:

    Pourquoi lorsqu'un nouveau livre apparait; alors que la clé primaire id_livre s'incrémente dans la premiere table , la clé étrangère ne s'incremente pas dans la deuxième puisqu'elle sont liées (d'ailleurs elle ne se marque même pas dans la deuxième table) ?

    Merci de bien vouloir apporter votre aide a un débutant.


  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut encore un probleme
    Lorsque j'insere dans ma table 1 ma clé de etrangère id_livre avec le numéro "1" mysql me dit qu'une contrainte a echoué pourtant j'ai bien id-livre avec la cle "1" qui est présente dans ma table de reference.

    comment ca se fait?

    merci d'avance


  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 091
    Points : 31 510
    Points
    31 510
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par salsabouge Voir le message
    Pourquoi lorsqu'un nouveau livre apparait; alors que la clé primaire id_livre s'incrémente dans la premiere table , la clé étrangère ne s'incremente pas dans la deuxième puisqu'elle sont liées
    1) C’est à vous de procéder aux ajouts dans les tables (instruction INSERT), d’abord dans la table T1 des livres, puis dans l’autre table, T2.

    2) Quand vous insérez une ligne dans la table T2, le SGBD ne lisant pas dans le marc de café, il ne peut pas deviner à quel livre parmi l’ensemble des livres attacher la ligne insérée : à vous de lui fournir la valeur de la clé étrangère déterminant le livre cible.


    Citation Envoyé par salsabouge Voir le message
    Lorsque j'insere dans ma table 1 ma clé de etrangère id_livre avec le numéro "1" mysql me dit qu'une contrainte a echoué pourtant j'ai bien id-livre avec la cle "1" qui est présente dans ma table de reference.

    comment ca se fait?
    Les habitués de SQL n’ont pas de problème. Mais comme eux non plus ne lisent pas dans le marc de café, il est nécessaire que vous fournissiez le message exact que vous a transmis le SGBD, voire les instructions SQL : CREATE TABLE pour chaque table, et instructions de mise à jour des tables.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut J'ai du louper quelque chose
    Bonjour,

    Si je fais 2 tables (c un exemple testé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    CREATE TABLE infos_livre (
    id_livre INTEGER UNSIGNED NOT NULL,
    constraint fk_liste_livres_id_livre
    FOREIGN KEY(id_livre)
    REFERENCES liste_livres(id_livre)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
    engine=innoDB;
     
     
    CREATE TABLE liste_livres (
    id_livre INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
    livre varchar(45) not null,
    Primary key(id_livre))
    engine=innoDB;
    Et que ensuite je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    insert into liste_livres(livre) values('livre1'); tout va bien => ID =1
     
    insert into infos_livre(id_livre) values(1); tout va bien
     
    insert into infos_livre(id_livre) values(2); Ca met un ID=2
    pourtant je n'ai pas d'ID=2 dans ma table références ; elle est passé ou l'intégrité referentielle la?

    Merci de votre aide.

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 091
    Points : 31 510
    Points
    31 510
    Billets dans le blog
    16
    Par défaut
    Bonjour,

    Vous n'avez toujours pas fourni la teneur du message transmis par le SGBD, mais bon.

    Citation Envoyé par salsabouge Voir le message
    je fais:
    insert into liste_livres(livre) values('livre1'); tout va bien => ID =1
    insert into infos_livre(id_livre) values(1); tout va bien
    insert into infos_livre(id_livre) values(2); Ca met un ID=2
    Quand vous exécutez l’instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into infos_livre(id_livre) values(2)
    le SGBD vérifie s’il existe dans la table liste_livres une ligne pour laquelle id_livre = 2. Or vous avez omis au préalable de créer pour cette table une ligne pour laquelle id_livre = 2, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into liste_livres(livre) values('Vingt ans dans un mur, la vie d’une brique')
    Si vous exécutez une instruction SELECT * FROM liste_livres, vous constaterez cette omission.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut retour message d'erreur
    autre exemple

    J'ai entré la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert into fee.liste_membres(membre)  values('membre 1');
    l'ID est auto incrementé et est egal a 1

    (la table a les champs "id_membre" auto incrementé et "membre")

    ensuite je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert into fee.infos_membre(id_membre)  values(1);
    Et la j'ai cette erreur:

    Cannot add or update a child row: a foreign key constraint fails (`fee`.`infos_membre`, CONSTRAINT `infos_membre_ibfk_2` FOREIGN KEY (`code_postal`) REFERENCES `code_postal` (`code_postal`) ON DELETE NO ACTION ON UPDATE NO ACTION)
    pourquoi??

  7. #7
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 091
    Points : 31 510
    Points
    31 510
    Billets dans le blog
    16
    Par défaut
    Et la j'ai cette erreur:


    Citation:
    Cannot add or update a child row: a foreign key constraint fails (`fee`.`infos_membre`, CONSTRAINT `infos_membre_ibfk_2` FOREIGN KEY (`code_postal`) REFERENCES `code_postal` (`code_postal`) ON DELETE NO ACTION ON UPDATE NO ACTION)

    pourquoi??
    Ça coince parce que d'après le message du SGBD, vous fournissez pour l'attribut code_postal (table infos_membre) une valeur qui n'existe pas dans la table code_postal.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 106
    Points : 50
    Points
    50
    Par défaut d'accord!
    Merci beaucoup pour votre aide!

    A bientot


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

Discussions similaires

  1. probleme clé étrangère
    Par jockerse dans le forum Hibernate
    Réponses: 4
    Dernier message: 01/04/2015, 22h15
  2. Réponses: 5
    Dernier message: 05/07/2012, 13h27
  3. probleme de definition de clé étrangère
    Par clem62173 dans le forum Requêtes
    Réponses: 0
    Dernier message: 28/03/2010, 11h48
  4. probleme avec CLé étrangère
    Par mystro7200 dans le forum Débuter
    Réponses: 7
    Dernier message: 21/11/2008, 07h46
  5. [Kylix] Probleme d'execution de programmes...
    Par yopziggy dans le forum EDI
    Réponses: 19
    Dernier message: 03/05/2002, 14h50

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