Recherche de tables avec des clés étrangères faisant référence à une colonne spécifique
Dans une base de données relationnelle, il est courant que les tables aient des clés étrangères faisant référence à d'autres clés primaires des tables. Cela permet d’établir et de renforcer les relations entre les entités. Cependant, il peut être difficile de déterminer quelles tables ont des clés étrangères faisant référence à une colonne particulière.
Pour relever ce défi, nous décrivons une méthode permettant d'identifier les tables dont les clés étrangères font référence à la colonne d'une table spécifiée et qui ont des valeurs réelles dans ces clés étrangères.
Considérons l'exemple de schéma de base de données suivant :
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`) );
Dans ce schéma, les tables Y et Z ont clés étrangères faisant référence à la colonne X_id de la table X. Pour récupérer une liste de ces tables et identifier celles qui ont des valeurs dans les clés étrangères :
SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id';
Cette requête renverra des informations sur toutes les tables qui ont des clés étrangères faisant référence à la colonne de la table spécifiée. Cela garantit également que les clés étrangères ont au moins une valeur associée.
Pour affiner davantage le résultat à une base de données spécifique, la requête modifiée suivante peut être utilisée :
SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id' AND TABLE_SCHEMA = 'your_database_name';
Ici, your_database_name doit être remplacé par le nom réel de la base de données où résident les tables.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!