MySQLの外部キー(FOREIGN KEY)とは?基本から使い方までわかりやすく解説
MySQLの外部キー(外部キー制約)の基本
MySQLにおける外部キー(Foreign Key)は、テーブル同士に関連性(リレーションシップ)を持たせるために使用される重要な仕組みです。外部キーは、別のテーブルの特定のカラム(通常は主キー)と対応付けることで、テーブル間の整合性を保ちます。
外部キーによるテーブル間の関係には、主に以下の2種類があります。
- 1対1(One to One)の関係:あるテーブルの1件のレコードが、別のテーブルの1件のレコードと紐づく関係です。
- 1対多(One to Many)の関係:あるテーブルの1件のレコードが、別のテーブルの複数のレコードと紐づく関係です。実務では最もよく使われるパターンです。
サンプルテーブルを作成する
それでは、実際に例を見ていきましょう。まず、CREATE TABLEコマンドを使って最初のテーブル「tblF」を作成します。
mysql> create table tblF
-> (
-> id int ,
-> FirstName varchar(100),
-> FK_PK int
-> );
Query OK, 0 rows affected (0.57 sec)
次に、参照先となる2つ目のテーブル「tblP」を作成します。ここでは「FK_PK」カラムを主キー(PRIMARY KEY)として設定しています。
mysql> create table tblP
-> (
-> FK_PK int,
-> LastName varchar(100),
-> primary key(FK_PK)
-> );
Query OK, 0 rows affected (0.94 sec)
ALTER TABLEで外部キーを追加する
外部キーを作成するための基本的な構文は以下の通りです。ALTER TABLE文とADD CONSTRAINTを使い、「tblF」テーブルの「FK_PK」カラムに対して、「tblP」テーブルの「FK_PK」カラムを参照する外部キー制約を追加します。
mysql> ALTER table tblF add constraint ConstFK foreign key(FK_PK) references tblP(FK_PK); Query OK, 0 rows affected (2.17 sec) Records: 0 Duplicates: 0 Warnings: 0
このSQLでは、制約名を「ConstFK」として定義しています。制約名を付けておくことで、後から制約の削除や変更を行いやすくなります。
DESCコマンドで外部キーを確認する
外部キーが正しく作成されたかどうかは、DESCコマンドでテーブル構造を確認することでチェックできます。
mysql> DESC tblF;
実行結果は以下の通りです。「FK_PK」カラムのKey列に「MUL」と表示されており、これがインデックス(外部キー)が設定されていることを示しています。
+-----------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | FirstName | varchar(100) | YES | | NULL | | | FK_PK | int(11) | YES | MUL | NULL | | +-----------+--------------+------+-----+---------+-------+ 3 rows in set (0.05 sec)
まとめ
外部キーを使用することで、テーブル間のデータ整合性をデータベース側で保証できます。参照先に存在しない値の登録を防ぐことができるため、信頼性の高いデータベース設計には欠かせない機能です。ぜひ基本的な作成方法と確認方法をマスターしておきましょう。
-
MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説
本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効
-
MySQLで2つのキーを効率的に検索する方法(OR・UNION活用)
MySQLでは、複数の条件でデータを検索したい場面が多くあります。本記事では、2つのキー(インデックス付きカラム)を使った検索を効率的に行う方法を解説します。OR演算子を使った基本的な検索方法2つのキーによる検索は、単一のキーに対して十分に最適化された「OR」演算子、または同じく最適化された「AND」演算子を利用することで実現できます。まず、「OR」演算子と組み合わせて2つの異なるキーを検索する方法を見てみましょう。SELECT field1_index, field2_index FROM tableName WHERE field1_index = 1 OR field2_index =