2012-10-04 4 views
0

J'ai créé un script pour afficher les clés étrangères dans la table particulière.Récupérer des clés étrangères dans la table

SELECT i.CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS i 
LEFT JOIN information_schema.KEY_COLUMN_USAGE k ON 
i.CONSTRAINT_NAME = k.CONSTRAINT_NAME WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND i.TABLE_NAME = 'sample'; 

Quand j'exécuter cette commande dans mon hôte, il affiche la liste des principales contraintes étrangères trouvées dans toutes les bases de données avec table nom "sample".

Mais j'ai besoin de base de données particulière, exemple de table foreign keys.

+0

S'il vous plaît une résoudre mon problème –

+0

je suis arrivé requête: SELECT CONSTRAINT_NAME DE information_schema.TABLE_CONSTRAINTS OÙ CONSTRAINT_TYPE = 'FOREIGN KEY' ET TABLE_SCHEMA = 'base de données' ET TABLE_NAME = 'tablename'; –

+0

Merci pour vous toutes les mises à jour –

Répondre

1

ajouter juste à la fin

AND i.table_schema = '<the name of your database which is a schema>' 

EDIT:

Modifier la gauche à rejoindre

LEFT JOIN information_schema.KEY_COLUMN_USAGE 
    ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME AND 
     i.TABLE_SCHEMA = k.TABLE_SCHEMA 

parce que vous pourriez trouver contrainte avec le même nom dans différents schémas.

what's a schema and a database in mysql

+0

Je vais avoir 3 base de données. tous ont la table d'échantillon. J'ai ajouté cette contrainte dans ma requête comme ceci: SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_NAME DE information_schema.TABLE_CONSTRAINTS i LEFT JOIN information_schema.KEY_COLUMN_USAGE k = k ON i.CONSTRAINT_NAME. CONSTRAINT_NAME O WH i.CONSTRAINT_TYPE = 'CLÉ ÉTRANGÈRE' ET i.TABLE_SCHEMA = 'database1' ET i.TABLE_NAME = 'échantillon'; –

+0

Tableau d'échantillons unique avec 3 clés. Le résultat de la requête ci-dessus est de 9 clés étrangères. C'est affiché toutes les clés dans la base de données 3 –

+0

@StefanEdwards Ok, pouvez-vous essayer de modifier? –

0

devez sélectionner la base de données avant de lancer cette requête. Le suivant peut être utile.

USE YourDatabaseName 

SELECT i.CONSTRAINT_NAME 
FROM information_schema.TABLE_CONSTRAINTS i 
LEFT JOIN information_schema.KEY_COLUMN_USAGE k 
ON i.CONSTRAINT_NAME = k.CONSTRAINT_NAME 
WHERE i.CONSTRAINT_TYPE = 'FOREIGN KEY' 
AND i.TABLE_NAME = 'sample' 
Questions connexes