294

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

  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. そして、それらのテーブルのどれが実際に外部キーに値を持っているか
4

8 に答える 8

410

どうぞ:

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

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

SELECT *
FROM
  KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'X'
  AND REFERENCED_COLUMN_NAME = 'X_id'
  AND TABLE_SCHEMA = 'your_database_name';
于 2009-07-15T19:27:30.787 に答える
65

MySQL 5.5リファレンスマニュアル:「InnoDBとFOREIGNKEYの制約」

SELECT
  ke.REFERENCED_TABLE_SCHEMA parentSchema,
  ke.referenced_table_name parentTable,
  ke.REFERENCED_COLUMN_NAME parentColumnName,
  ke.TABLE_SCHEMA ChildSchema,
  ke.table_name childTable,
  ke.COLUMN_NAME ChildColumnName
FROM
  information_schema.KEY_COLUMN_USAGE ke
WHERE
  ke.referenced_table_name IS NOT NULL
  AND ke.REFERENCED_COLUMN_NAME = 'ci_id' ## Find Foreign Keys linked to this Primary Key
ORDER BY
  ke.referenced_table_name;
于 2010-07-22T17:23:50.027 に答える
15

information_schemaスキーマに関連するすべての情報は、適切な名前のテーブルで見つけることができます。

REFERENTIAL_CONSTRAINTSとを確認してくださいKEY_COLUMN_USAGE。前者は、どのテーブルが他のテーブルから参照されているかを示します。後者は、それらのフィールドがどのように関連しているかを教えてくれます。

于 2009-04-30T13:57:38.203 に答える