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

MySQLで複数の列にFOREIGN KEY制約を設定する方法

MySQLでは、テーブル内の複数の列に対して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」を参照する新しい外部キー制約を追加できます。

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」に2つの外部キー制約が設定されていることが確認できます。1つは「cust_id」列に、もう1つは「cust_unq_id」列に設定されています。Key列に「MUL」と表示されていることで、それぞれの列が外部キーとして機能していることがわかります。

ポイントのまとめ

複数列へのFOREIGN KEY制約追加時の注意点は以下の通りです。

・各外部キーは異なる親テーブルを参照する必要がある
・参照先の列にはインデックス(PRIMARY KEYまたはUNIQUE)が必要
・ALTER TABLE文を使えば、既存テーブルにも後から外部キーを追加可能
・データ型と文字セットは親テーブルと一致させる必要がある

  1. MySQLテーブルのカラム名を取得する方法【SHOW・DESCRIBE活用ガイド】

    SHOWコマンドでカラム名を取得するMySQLでは、SHOWコマンドを使うことで、テーブルのカラム(列)名を簡単に確認できます。カラム名だけでなく、データ型やNULL許可、キー情報なども一緒に取得できるのが特徴です。基本構文show columns from テーブル名;サンプルテーブルの作成まず、動作確認用に「DemoTable」というテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentFirstName varchar(

  2. MySQLデータベースで外部キーを確認・識別する方法をわかりやすく解説

    はじめに:サンプルテーブルを作成するまずは、外部キーの参照元となる基本テーブルを作成しましょう。以下のクエリを実行します。mysql> create table DemoTable1 (Id int NOT NULL PRIMARY KEY, EmployeeName varchar(100)); Query OK, 0 rows affected (0.50 sec)外部キー制約を持つ2つ目のテーブルを作成する続いて、外部キー制約を設定した2つ目のテーブルを作成します。ここでは DemoTable2 の Id カラムが、DemoTable1 の Id カラムを参照する外部キーとして定義