MySQLでテーブルの複数カラムにFOREIGN KEY(外部キー)制約を追加する方法
MySQLでは、1つのテーブル内の複数のカラムに対してFOREIGN KEY(外部キー)制約を追加することができます。ただし、そのためには子テーブル側の各外部キーが、それぞれ異なる親テーブルを参照しているという条件を満たす必要があります。
具体例
まず、カラム「cust_unq_id」にPRIMARY KEY(主キー)制約が設定されたテーブル「customer2」があるとします。構造は以下の通りです。
mysql> describe customer2; +-------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+-------+ | cust_id | int(11) | YES | | NULL | | | First_name | varchar(20) | YES | | NULL | | | Last_name | varchar(20) | YES | | NULL | | | City | varchar(10) | YES | | NULL | | | cust_unq_id | int(11) | NO | PRI | 0 | | +-------------+-------------+------+-----+---------+-------+ 5 rows in set (0.06 sec)
次に、すでにカラム「Cust_id」に対して親テーブル「customer」を参照するFOREIGN KEY制約が設定されているテーブル「orders1」を用意します。
mysql> describe orders1; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | Product_name | varchar(25) | YES | | NULL | | | orderdate | date | YES | | NULL | | | Cust_id | int(11) | YES | MUL | NULL | | | cust_unq_id | int(11) | YES | | NULL | | +--------------+-------------+------+-----+---------+-------+ 5 rows in set (0.04 sec)
この状態で、以下のALTER TABLE文を実行すると、カラム「cust_unq_id」に対して、親テーブル「customer2」を参照するもう一つのFOREIGN KEY制約を追加できます。
mysql> Alter table orders1 add FOREIGN KEY(cust_unq_id) REFERENCES Customer2(Cust_unq_id); Query OK, 0 rows affected (0.25 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> describe orders1; +--------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------------+-------------+------+-----+---------+-------+ | order_id | int(11) | NO | PRI | NULL | | | Product_name | varchar(25) | YES | | NULL | | | orderdate | date | YES | | NULL | | | Cust_id | int(11) | YES | MUL | NULL | | | cust_unq_id | int(11) | YES | MUL | NULL | | +--------------+-------------+------+-----+---------+-------+ 5 rows in set (0.06 sec)
上記の実行結果を見ると、「orders1」テーブルには「cust_id」と「cust_unq_id」の2つのカラムにそれぞれFOREIGN KEY制約が設定されていることが確認できます。Key列がどちらも「MUL」と表示されている点に注目してください。これは複数の外部キーが設定されていることを示しています。
ポイントまとめ
- ALTER TABLE文とADD FOREIGN KEY句を使えば、既存テーブルにも後から外部キー制約を追加できる。
- REFERENCES句で参照先の親テーブルとカラムを指定する。
- 参照先のカラムは親テーブル側でPRIMARY KEYまたはUNIQUEインデックスが設定されている必要がある。
-
MySQLでsp_helpのようにフィールド型や制約を表示するには?SHOW CREATEコマンドの使い方
MySQLでsp_help相当の情報を取得するには? SQL Serverのsp_helpに相当する機能は、MySQLではSHOW CREATEコマンドで実現できます。このコマンドを使えば、テーブルのフィールド(カラム)のデータ型や、主キー・一意キーなどの制約情報をまとめて確認できます。 ケース1:テーブルの場合 テーブルの定義を表示する基本構文は次の通りです。 SHOW CREATE TABLE テーブル名; ケース2:ストアドプロシージャの場合 ストアドプロシージャの定義を表示する基本構文は次の通りです。 SHOW CREATE PROCEDURE プロシージャ名; サンプルテーブル
-
MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説
MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。外部キー制約を追加する基本構文既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecon