1

私の質問は、外部キーについてです。たとえば、X_PK を持つテーブル X と、null A_FK_X と null B_FK_X を持つテーブル A、B、C があります。テーブル C には、テーブル X への FK が含まれていません。テーブル A には、A_FK_X が初期化されたレコードが既にありましたが、テーブル B にはありません。

すべてのテーブルで指定された X_PK のすべての使用法を見つけることは可能ですか?

4

2 に答える 2

1

information_schemaデータベースを使用したい。このコードを試してください(CREATE TABLEステートメントが単純化されすぎていますが):

CREATE TABLE `X` (
    `X_id` INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY  (`X_id`)
  );

  CREATE TABLE `A` (
    `A_id` INT NOT NULL AUTO_INCREMENT,
    `X_id` INT NULL,
    PRIMARY KEY  (`A_id`),
    CONSTRAINT `A_FK_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  );

CREATE TABLE `B` (
    `B_id` INT NOT NULL AUTO_INCREMENT,
    `X_id` INT NULL,
    PRIMARY KEY  (`B_id`),
    CONSTRAINT `B_FK_X` FOREIGN KEY (`X_id`) REFERENCES `X` (`X_id`)
  );

CREATE TABLE `C` (
  `C_id` INT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`C_id`)
);

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

これにより、すべてのデータベース内のすべての参照が返されるため、 :X_idを含めることで検索を絞り込むことができます。TABLE_SCHEMA

SELECT * FROM KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME = 'X' AND REFERENCED_COLUMN_NAME = 'X_id' AND TABLE_SCHEMA='testdbname';

私のシステムでは、への参照を含むデータベースが1つしかないため、これらは同じ出力を返しますX_idが、出力はデータベース/テーブルの構造によって異なります。

于 2012-07-26T10:57:01.977 に答える
1

次のクエリに行くことができます:

からconstraint_schema,constraint_name,table_name,column_name,referenced_table_name,referenced_column_nameを選択information_schema.key_column_usage

于 2012-07-26T11:48:43.860 に答える