特定のテーブル列を参照し、それらの外部キーの値を持つすべてのテーブルを見つけるにはどうすればよいでしょうか? 質問する

特定のテーブル列を参照し、それらの外部キーの値を持つすべてのテーブルを見つけるにはどうすればよいでしょうか? 質問する

主キーが外部キーとして他のいくつかのテーブルで参照されているテーブルがあります。例:

  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`)
  )

さて、テーブル Y や Z のように、X への外部キーを含むテーブルがデータベース内にいくつあるかわかりません。以下を返すために使用できる SQL クエリはありますか?

  1. Xに外部キーを持つテーブルのリスト
  2. そして、どのテーブルが実際に外部キーに値を持っているか

ベストアンサー1

どうぞ:

SELECT *
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'X'
  AND REFERENCED_COLUMN_NAME = 'X_id';

類似したテーブル名や列名を持つ複数のデータベースがある場合は、クエリを特定のデータベースに制限することもできます。

SELECT *
FROM
  information_schema.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'X'
  AND REFERENCED_COLUMN_NAME = 'X_id'
  AND TABLE_SCHEMA = 'your_database_name';

おすすめ記事