私の質問は、外部キーについてです。たとえば、X_PK を持つテーブル X と、null A_FK_X と null B_FK_X を持つテーブル A、B、C があります。テーブル C には、テーブル X への FK が含まれていません。テーブル A には、A_FK_X が初期化されたレコードが既にありましたが、テーブル B にはありません。
すべてのテーブルで指定された X_PK のすべての使用法を見つけることは可能ですか?
私の質問は、外部キーについてです。たとえば、X_PK を持つテーブル X と、null A_FK_X と null B_FK_X を持つテーブル A、B、C があります。テーブル C には、テーブル X への FK が含まれていません。テーブル A には、A_FK_X が初期化されたレコードが既にありましたが、テーブル B にはありません。
すべてのテーブルで指定された X_PK のすべての使用法を見つけることは可能ですか?
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
が、出力はデータベース/テーブルの構造によって異なります。
次のクエリに行くことができます:
からconstraint_schema,constraint_name,table_name,column_name,referenced_table_name,referenced_column_nameを選択information_schema.key_column_usage