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

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インデックスが設定されている必要がある。
  1. MySQLでsp_helpのようにフィールド型や制約を表示するには?SHOW CREATEコマンドの使い方

    MySQLでsp_help相当の情報を取得するには? SQL Serverのsp_helpに相当する機能は、MySQLではSHOW CREATEコマンドで実現できます。このコマンドを使えば、テーブルのフィールド(カラム)のデータ型や、主キー・一意キーなどの制約情報をまとめて確認できます。 ケース1:テーブルの場合 テーブルの定義を表示する基本構文は次の通りです。 SHOW CREATE TABLE テーブル名; ケース2:ストアドプロシージャの場合 ストアドプロシージャの定義を表示する基本構文は次の通りです。 SHOW CREATE PROCEDURE プロシージャ名; サンプルテーブル

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

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