私は最近手渡された150以上のテーブルを持つ大規模なデータベースを持っています。テーブルごとではなく、DB全体のすべての外部キー制約を表示する簡単な方法があるかどうか疑問に思っています。
INFORMATION_SCHEMA
このためのテーブル。たとえば、 INFORMATION_SCHEMA TABLE_CONSTRAINTS
テーブル。
このような何かがそれをするはずです:
select *
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY'
これは私が有用な情報を取得することを好むものです:
SELECT CONSTRAINT_NAME,
UNIQUE_CONSTRAINT_NAME,
MATCH_OPTION,
UPDATE_RULE,
DELETE_RULE,
TABLE_NAME,
REFERENCED_TABLE_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'your_database_name'
ユーザーRedFilterが現在受け入れている回答は、データベースが1つしかない場合は正常に機能しますが、データベースが複数ある場合は機能しません。
use information_schema;
を入力した後、このクエリを使用してname_of_db
の外部キーを取得します。
select * from `table_constraints` where `table_schema` like `name_of_db` and `constraint_type` = 'FOREIGN KEY'
このクエリを使用してname_of_db
の外部キーを取得し、誰でも書き込み可能なファイルoutput_filepath_and_name
に保存します。
select * from `table_constraints` where `table_schema` like "name_of_db" and `constraint_type` = 'FOREIGN KEY' into outfile "output_filepath_and_name" FIELDS TERMINATED BY ',' ENCLOSED BY '"';
このコードをクエリ
select constraint_name,
table_schema,
table_name
from information_schema.table_constraints
あなたはconstraint_nameを取得し、database
のリストであるtable_schemaをフィルタリングします。
SQL:
select constraint_name,
table_schema,
table_name
from information_schema.table_constraints
where constraint_schema = 'astdb'
出力:
+----------------------------+--------------+---------------------+
| constraint_name | table_schema | table_name |
+----------------------------+--------------+---------------------+
| PRIMARY | astdb | asset_category |
| PRIMARY | astdb | asset_type |
| PRIMARY | astdb | asset_valuation |
| PRIMARY | astdb | assets |
| PRIMARY | astdb | com_mst |
| PRIMARY | astdb | com_typ |
| PRIMARY | astdb | ref_company_type |
| PRIMARY | astdb | supplier |
| PRIMARY | astdb | third_party_company |
| third_party_company_ibfk_1 | astdb | third_party_company |
| PRIMARY | astdb | user |
| PRIMARY | astdb | user_role |
+----------------------------+--------------+---------------------+