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

Requêtes MySQL Discussion :

Afficher les contraintes de clé étrangère


Sujet :

Requêtes MySQL

  1. #1
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut Afficher les contraintes de clé étrangère
    salut
    je cherche depuis un moment mais je n'arrive pas a trouve La commande qui me permet d'afficher la ou les noms de table sur laquelle une table a des relations exemple

    table1 a une contrainte de clé sur la table2
    comment savoir via une commande sql que la table1 a une contrainte sur la table2 ??

    merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 117
    Points : 28 494
    Points
    28 494
    Par défaut
    Cela est possible en consultant les tables du dictionnaire de la base de données.
    Bien qu'une norme ait été définie pour ces tables et vues, celle-ci est rarement mise en œuvre par les éditeurs de SGBD.
    En précisant le SGBD que vous utilisez et sa version, les réponses proposées seront adaptées aux spécificités et limitations de celui-ci.
    Règles du forum Langage SQL à lire par tous

  3. #3
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    merci pour ta réponse , je suis allez jeter un coup d'oeil ( après avoir pas mal cherché )
    mais e n'ai toujours pas trouvé de réponse , il s'agit d'une base en mysql , j'espère être dans la bonne section

  4. #4
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    j'avance :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
    WHERE TABLE_NAME = 'premiere'
    mais cela ne m'affiche pas le nom du champs concerné

  5. #5
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

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

    Voilà une requête qui donne un paquet d'informations sur les clefs étrangères à partir du catalogue de MySQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT k.CONSTRAINT_SCHEMA, k.CONSTRAINT_NAME, k.TABLE_NAME, k.COLUMN_NAME
         , k.REFERENCED_TABLE_SCHEMA, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c
           ON k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND k.CONSTRAINT_NAME = c.CONSTRAINT_NAME
    WHERE c.CONSTRAINT_TYPE = 'FOREIGN KEY';
    Cette requête donnant toutes les clefs étrangères, il faut que tu filtres un peu plus, en filtrant sur le schéma, le nom de la table qui a une clef étrangère (ta table1 dans ton exemple), ou la table référencée (ta table2).
    Pour limiter la liste aux clefs étrangères de la table1, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT k.CONSTRAINT_SCHEMA, k.CONSTRAINT_NAME, k.TABLE_NAME, k.COLUMN_NAME
         , k.REFERENCED_TABLE_SCHEMA, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME
    FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS k
    INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS c
           ON k.CONSTRAINT_SCHEMA = c.CONSTRAINT_SCHEMA AND k.CONSTRAINT_NAME = c.CONSTRAINT_NAME
    WHERE c.CONSTRAINT_TYPE = 'FOREIGN KEY'
    AND k.TABLE_NAME = 'table1';
    La colonne qui a une clef étrangère est COLUMN_NAME.
    La table référencée est REFERENCED_TABLE_NAME, la colonne référencée est REFERENCED_COLUMN_NAME.

    Je viens de finir un tutoriel sur le sujet, qui ne devrait pas tarder à être disponible .

    ced

  6. #6
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    impeccable !
    question , la bdd INFORMATION_SCHEMA existe obligatoirement sur tous les serveurs mysql ?

    sinon , merci cela répond parfaitement a ma problématique , c'est dans le cadre d'un projet de générateur de classe a partir d'une bdd

  7. #7
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Citation Envoyé par le_chomeur Voir le message
    question , la bdd INFORMATION_SCHEMA existe obligatoirement sur tous les serveurs mysql ?
    Non, le catalogue n'est là que depuis la version 5.0.2.

    Dans les versions précédentes, il faut se dépatouiller avec la commande SHOW...

    ced

  8. #8
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    aurais tu un petit exemple avec la commande show pour récupèrer uniquement la clé ainsi que el nom de la table ??

  9. #9
    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 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 040
    Points : 23 795
    Points
    23 795
    Par défaut
    Je ne suis pas du tout un spécialiste de la commande SHOW... Mais je ne crois pas qu'il y ait d'autre moyen que passer par la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW CREATE TABLE table1
    Tu récupères alors le script de création de la table, et il te reste à te rechercher la portion correspondant à la création de la clef étrangère.
    Désolé, mais je ne crois pas qu'on puisse faire mieux que ça avec SHOW, en tout cas dans la version 4...
    Au passage, ça ne vaut que pour les tables en InnoDB. Les tables en MyISAM ne permettent pas les clefs étrangères...

    ced

  10. #10
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    merci beaucoup , après récupération du script de création , je pourrais parser / analyser les données
    surement a bientôt encore merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/10/2012, 16h15
  2. Afficher les contraintes
    Par zaineb.z dans le forum Administration
    Réponses: 1
    Dernier message: 16/04/2009, 21h11
  3. Afficher les contraintes d'une table
    Par fatjoe dans le forum SQL
    Réponses: 3
    Dernier message: 17/11/2008, 12h32
  4. Réponses: 8
    Dernier message: 08/08/2008, 12h45
  5. Afficher les contraintes d'une base
    Par ruiz.nicolas dans le forum AS/400
    Réponses: 12
    Dernier message: 22/11/2007, 10h12

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