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 :

Sauriez-vous svp m'aider à compléter ce code SQL (clé étrangère)


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut Sauriez-vous svp m'aider à compléter ce code SQL (clé étrangère)
    Bonjour tout le monde,

    J'ai plusieurs tables dans ma bd MYSQL.

    J'ai une table qui s'appelle cours dont voici les informations :

    Champ Type Null Défaut Commentaires
    ID int(11) Non
    MNEMONIC text Non
    MATRICULE_PROF text Non
    NOM_ANNEE text Non
    NOM_COURS text Non
    ECTS_TH int(11) Non
    ECTS_TP int(11) Non
    PONDERATION int(11) Non
    ANNEE_ETUDE text Non
    J'aimerais ajouter une clé étrangère par rapport à cette table :

    ID_TYPE_DE_COURS int(11) Non
    MNEMONIC text Non
    NOM_TYPE_DE_COURS text Non
    SESSION int(11) Non
    Donc j'aimerais ajouter comme clé étrangère, ce champ :

    ID_TYPE_DE_COURS
    J'ai fait une recherche dans le forum et je suis tombé sur ceci :

    ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]]
    FOREIGN KEY [index_name] (index_col_name,...)
    [reference_definition]
    Je fais donc :

    ALTER TABLE cours
    ADD [CONSTRAINT [symbol]] //Que dois-je mettre à la place de symbol ?
    FOREIGN KEY [ID_TYPE_DE_COURS] (index_col_name,...) //Que dois-je mettre à la place de index_col_name ?
    [reference_definition] //Que dois-je mettre à la place de reference_definition ?

    Ce que je ne sais pas, je l'ai mis en rouge.

    J'ai déjà compléter ce que je savais.

    Sauriez-vous compléter ce code SQL SVP ?

    Dès que j'en aurai un, ça devrait aller pour le reste.

    Merci d'avance.

    beegees

  2. #2
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Par défaut
    En clair, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE table_enfant
    ADD CONSTRAINT fk_nom_contrainte FOREIGN KEY
    (colonne_visée) REFERENCES table_parent(colonne_reference);
    Remplace "table_enfant" et "colonne_visée" par les informations de la table sur laquelle tu veux ajouter la contrainte de clé étrangère.

    Remplace "table_parent" et "colonne_reference" par les informations de la table de référence.

  3. #3
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Sw3eT Voir le message
    En clair, la syntaxe est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE table_enfant
    ADD CONSTRAINT fk_nom_contrainte FOREIGN KEY
    (colonne_visée) REFERENCES table_parent(colonne_reference);
    Remplace "table_enfant" et "colonne_visée" par les informations de la table sur laquelle tu veux ajouter la contrainte de clé étrangère.

    Remplace "table_parent" et "colonne_reference" par les informations de la table de référence.
    Bonjour et merci pour ta réponse.

    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE cours ADD CONSTRAINT fk_type_de_cours FOREIGN KEY
    (Type_de_Cours) REFERENCES type_cours(ID_TYPE_DE_COURS);
    J'ai ce message d'erreur :

    Erreur

    requête SQL:

    ALTER TABLE cours ADD CONSTRAINT fk_type_de_cours FOREIGN KEY ( Type_de_Cours ) REFERENCES type_cours( ID_TYPE_DE_COURS )

    MySQL a réponduocumentation
    #1452 - Cannot add or update a child row: a foreign key constraint fails (`pharma/#sql-1624_3dc`, CONSTRAINT `fk_type_de_cours` FOREIGN KEY (`Type_de_Cours`) REFERENCES `type_cours` (`ID_TYPE_DE_COURS`))
    Vois-tu où j'ai fait l'erreur ?

    Merci encore pour ton aide.

    beegees

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    as tu déjà des lignes dans tes tables?
    est ce qu'une ne respecterait pas cette clé?

  5. #5
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Cybher Voir le message
    salut,

    as tu déjà des lignes dans tes tables?
    est ce qu'une ne respecterait pas cette clé?
    Salut,

    J'ai ajouté le champ :

    Type_de_Cours int(11) Non
    dans la table cours, est-ce que je devais le faire ?

    Merci
    beegees

  6. #6
    Membre averti
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Par défaut
    Avant d'appliquer la contrainte de clé étrangère vérifies qu'il n'y a pas de problème d'intégrité référentielle.

    Tous les ID_TYPE_DE_COURS de la table type_cours doivent être présent dans la colonne Type_de_Cours de la table cours.

    Ensuite MySQL est très **** au niveaux des contraintes, il faut que tes deux colonnes soit exactement de même type, et qu'il n'y est vraiment aucune différences.
    Si Type_de_Cours est UNSIGNED et pas ID_TYPE_DE_COURS ça ne fonctionnera pas par exemple (ça m'est arrivé ).

  7. #7
    Membre expérimenté
    Avatar de beegees
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2004
    Messages
    3 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 610
    Par défaut
    Citation Envoyé par Sw3eT Voir le message
    Avant d'appliquer la contrainte de clé étrangère vérifies qu'il n'y a pas de problème d'intégrité référentielle.

    Tous les ID_TYPE_DE_COURS de la table type_cours doivent être présent dans la colonne Type_de_Cours de la table cours.

    Ensuite MySQL est très **** au niveaux des contraintes, il faut que tes deux colonnes soit exactement de même type, et qu'il n'y est vraiment aucune différences.
    Si Type_de_Cours est UNSIGNED et pas ID_TYPE_DE_COURS ça ne fonctionnera pas par exemple (ça m'est arrivé ).
    Merci pour ta réponse.

    Est-ce que ID_type_de_cours doit être un index pour qu'il puisse être une fk ?

    ça ne fonctionne toujours pas :

    Je vous laisse les versions imprimables de mes deux tables, sauriez-vous y jeter un coup d'oeil svp ?

    Un tout grand merci d'avance.

    beegees

  8. #8
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    peut on plutôt avoir les ordres de création des tables?
    Merci

Discussions similaires

  1. Sauriez-vous svp m'expliquer cette requête JOIN SVP ?
    Par beegees dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/12/2008, 15h17
  2. Réponses: 4
    Dernier message: 09/06/2008, 23h19
  3. Réponses: 10
    Dernier message: 18/05/2008, 18h23
  4. Réponses: 1
    Dernier message: 15/05/2008, 12h22
  5. Réponses: 9
    Dernier message: 09/02/2008, 20h42

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