MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで外部キー制約の一覧を取得する方法

MySQLで外部キー制約の一覧を取得する方法

データベースを運用していると、特定のスキーマに定義されている外部キー制約だけを確認したい場面があります。例えば、「business」というデータベースに複数のテーブルが存在する場合、information_schema.referential_constraints テーブルに対してクエリを実行することで、外部キー制約のみを抽出して表示できます。

外部キー制約を取得するSQLクエリ

mysql> select *
    -> from information_schema.referential_constraints
    -> where constraint_schema = 'business';

constraint_schema にデータベース名(スキーマ名)を指定することで、対象のデータベースに属する外部キー制約だけに絞り込んで取得できます。条件を指定しない場合は、サーバー上のすべてのデータベースの参照制約が返されるため、注意が必要です。

実行結果の出力例

上記のクエリを実行すると、以下のように外部キー制約のみが一覧形式で表示されます。

+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
| CONSTRAINT_CATALOG | CONSTRAINT_SCHEMA | CONSTRAINT_NAME          | UNIQUE_CONSTRAINT_CATALOG | UNIQUE_CONSTRAINT_SCHEMA | UNIQUE_CONSTRAINT_NAME | MATCH_OPTION | UPDATE_RULE | DELETE_RULE | TABLE_NAME        | REFERENCED_TABLE_NAME |
+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
| def                | business          | ConstChild               | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | childdemo         | parentdemo            |
| def                | business          | ConstFK                  | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | tblf              | tblp                  |
| def                | business          | constFKPK                | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | foreigntable      | primarytable1         |
| def                | business          | FKConst                  | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | foreigntabledemo  | primarytabledemo      |
| def                | business          | primarytable1demo_ibfk_1 | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | primarytable1demo | foreigntable1         |
| def                | business          | StudCollegeConst         | def                       | business                 | PRIMARY                | NONE         | NO ACTION   | NO ACTION   | studentenrollment | college               |
+--------------------+-------------------+--------------------------+---------------------------+--------------------------+------------------------+--------------+-------------+-------------+-------------------+-----------------------+
6 rows in set (0.07 sec)

主なカラムの意味

  • CONSTRAINT_NAME:外部キー制約の名前。明示的に命名しない場合、MySQLが自動生成した名前(例:テーブル名_ibfk_1)が割り当てられます。
  • TABLE_NAME:外部キーが設定されているテーブル(子テーブル)。
  • REFERENCED_TABLE_NAME:参照先となるテーブル(親テーブル)。
  • UPDATE_RULE / DELETE_RULE:親テーブルの行が更新・削除されたときの動作。CASCADE、SET NULL、RESTRICT、NO ACTIONなどが設定されます。

この情報を活用すれば、データベース全体の参照整合性の設計状況を把握できたり、不要になった制約の削除や変更を検討する際の資料として役立てることができます。また、SHOW CREATE TABLE 文を使えば、個々のテーブル単位で制約の詳細な定義を確認することも可能です。

  1. MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説

    MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。外部キー制約を追加する基本構文既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecon

  2. MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説

    本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効