Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 26.8Mb
PDF (A4) - 26.9Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


1.7.3.2 FOREIGN KEY の制約

外部キーを使用すると、複数のテーブルにわたる関連データをクロス参照することができ、外部キー制約は、この分散したデータの整合性の維持に役立ちます。

MySQL は、CREATE TABLE および ALTER TABLE ステートメントにおける ON UPDATE および ON DELETE 外部キー参照をサポートします。使用可能な参照アクションは、RESTRICT (デフォルト)、CASCADESET NULL、および NO ACTION です。

注記

NDB は、参照カラムが親テーブルの主キーである ON UPDATE CASCADE アクションをサポートしません。

SET DEFAULT も MySQL Server でサポートされますが、現在、InnoDB および NDB によって無効として拒否されます。MySQL は遅延した制約のチェックをサポートしないので、NO ACTIONRESTRICT として扱われます。外部キーについて MySQL によってサポートされる正確な構文については、セクション13.1.17.2「外部キー制約の使用」を参照してください。

MATCH FULLMATCH PARTIAL、および MATCH SIMPLE は許可されますが、同じステートメントで使用されるすべて ON DELETE 句と ON UPDATE 句を MySQL Server に無視させるため、これらを使用しないでください。MySQL では MATCH オプションはほかの効果がなく、事実上常に MATCH SIMPLE セマンティクスが強制されます。

MySQL では、外部キーカラムにインデックスを付ける必要があります。外部キー制約はあるが所定のカラムのインデックスがないテーブルを作成する場合、インデックスが作成されます。例外: MySQL Cluster には、外部キーカラムで明示的な一意キー (または主キー) が必要です。

INFORMATION_SCHEMA.KEY_COLUMN_USAGE テーブルから、外部キーに関する情報を取得できます。このテーブルに対するクエリーの例を次に示します。

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME 
     > FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE 
     > WHERE REFERENCED_TABLE_SCHEMA IS NOT NULL;
+--------------+---------------+-------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |
+--------------+---------------+-------------+-----------------+
| fk1          | myuser        | myuser_id   | f               |
| fk1          | product_order | customer_id | f2              |
| fk1          | product_order | product_id  | f1              |
+--------------+---------------+-------------+-----------------+
3 rows in set (0.01 sec)

InnoDB テーブル上での外部キーの情報は、INFORMATION_SCHEMA データベースにおける INNODB_SYS_FOREIGN および INNODB_SYS_FOREIGN_COLS テーブルにもあります。