Comment trouver toutes les tables qui ont les clés étrangères qui font référence à table en particulier.colonne et ont les valeurs de ces clés étrangères?
J'ai une table dont la clé primaire est référencé dans plusieurs autres tableaux de clé étrangère. Par exemple:
CREATE TABLE `X` (
`X_id` int NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`X_id`)
)
CREATE TABLE `Y` (
`Y_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`X_id` int DEFAULT NULL,
PRIMARY KEY (`Y_id`),
CONSTRAINT `Y_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
CREATE TABLE `Z` (
`Z_id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`X_id` int DEFAULT NULL,
PRIMARY KEY (`Z_id`),
CONSTRAINT `Z_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
)
Maintenant, je ne sais pas combien de tables il y a dans la base de données qui contiennent des clés étrangères dans X comme des tables Y et Z. Est-il une requête SQL que je peux utiliser pour le retour:
- Une liste de tables qui ont des clés étrangères dans X
- ET qui de ces tables ont effectivement des valeurs dans la clé étrangère
Vous devez vous connecter pour publier un commentaire.
Ici, vous allez:
Si vous avez plusieurs bases de données avec les mêmes tables de noms de colonne vous pouvez également limiter votre requête à une base de données particulière:
MySQL 5.5 Manuel De Référence: "InnoDB et les Contraintes de CLÉ ÉTRANGÈRE"
Cette solution ne sera pas seulement d'afficher toutes les relations, mais aussi le nom de la contrainte, qui est nécessaire dans certains cas (par exemple baisse de contrainte):
Si vous souhaitez vérifier les tables dans une base de données spécifique, ajoutez la ligne suivante:
Vous pouvez trouver toutes schéma de l'information connexe dans le judicieusement nommé
information_schema
table.Vous pouvez consulter le tableau
REFERENTIAL_CONSTRAINTS
etKEY_COLUMN_USAGE
. L'ancien vous indique les tables référencées par d'autres; ce dernier va vous dire comment leurs champs sont liés.Liste de toutes les clés étrangères dans une db, y compris la description
limitant à une colonne dans une table de la table de
J'ai écrit un petit bash onliner que vous pouvez écrire un script pour obtenir une sympathique sortie:
mysql_references_to:
Pour que l'exécution:
mysql_references_to transaccion
(où transaccion aléatoire nom de la table) donne une sortie comme celle-ci:Plus simple:
1. Ouvrez phpMyAdmin
2. Sur la gauche, cliquez sur nom de base de données
3. Dans le coin supérieur droit de trouver "Concepteur" de l'onglet
Toutes les contraintes seront indiqués.