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

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)

まとめ

外部キーを使用することで、テーブル間のデータ整合性をデータベース側で保証できます。参照先に存在しない値の登録を防ぐことができるため、信頼性の高いデータベース設計には欠かせない機能です。ぜひ基本的な作成方法と確認方法をマスターしておきましょう。

  1. MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説

    本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効

  2. 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 =