Je poste sur une ancienne réponse pour ajouter quelques informations utiles.
J'ai eu un problème similaire, mais je voulais également voir le CONSTRAINT_TYPE ainsi que les noms des tables et des colonnes REFERENCEES. Ainsi,
-
Pour voir tous les FKs dans votre table :
USE '<yourschema>';
SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_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_SCHEMA = DATABASE()
AND i.TABLE_NAME = '<yourtable>';
-
Pour voir toutes les tables et les FKs de votre schéma :
USE '<yourschema>';
SELECT i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_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_SCHEMA = DATABASE();
-
Pour voir tous les FKs dans votre base de données :
SELECT i.TABLE_SCHEMA, i.TABLE_NAME, i.CONSTRAINT_TYPE, i.CONSTRAINT_NAME, k.REFERENCED_TABLE_NAME, k.REFERENCED_COLUMN_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';
Rappelez-vous !
Ce système utilise le moteur de stockage InnoDB. Si vous ne parvenez pas à faire apparaître les clés étrangères après les avoir ajoutées, c'est probablement parce que vos tables utilisent MyISAM.
Pour vérifier :
SELECT * TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = '<yourschema>';
Pour réparer, utilisez ceci :
ALTER TABLE `<yourtable>` ENGINE=InnoDB;