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文を使えば、既存テーブルにも後から外部キーを追加可能
・データ型と文字セットは親テーブルと一致させる必要がある
-
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(
-
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 カラムを参照する外部キーとして定義