【初心者向け】MySQLで外部キーを作成する構文を解説
MySQLで外部キー(FOREIGN KEY)を作成する際の基本的な構文は、以下の通りです。
ALTER TABLE 子テーブル名 ADD CONSTRAINT 制約名 FOREIGN KEY(外部キー列名) REFERENCES 親テーブル名 (主キー列名);
サンプルテーブルを作成して理解しよう
上記の構文を実際に理解するために、「部署テーブル」と「社員テーブル」の2つのテーブルを作成してみましょう。
1. 親テーブル(Department_Table)の作成
まず、親となる部署テーブルを作成します。使用するクエリは次の通りです。
mysql> CREATE TABLE Department_Table
-> (
-> Department_Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Department_Name VARCHAR(30)
-> );
Query OK, 0 rows affected (0.83 sec)
「Department_Id」が主キー(PRIMARY KEY)として設定され、自動採番(AUTO_INCREMENT)される構成になっています。
2. 子テーブル(Employee_Table)の作成
続いて、社員情報を格納する子テーブルを作成します。
mysql> CREATE TABLE Employee_Table
-> (
-> EmployeeID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName VARCHAR(80),
-> Job VARCHAR(30),
-> Department_Id INT NOT NULL REFERENCES department(departmentID)
-> );
Query OK, 0 rows affected (1.12 sec)
注意:列定義内のREFERENCESだけでは外部キーは作られない
上記のように、Department_Id INT NOT NULL REFERENCES department(departmentID) と列定義の中に直接 REFERENCES を書いても、MySQLでは実際に外部キー制約は作成されません。これは多くの初心者が陥りやすいポイントです。
MySQLでは、このインラインでの参照指定は構文としては解析されますが、無視されてしまうためです。確実に外部キーを設定したい場合は、後述の ALTER TABLE 文を使う方法が推奨されます。
ALTER TABLEで外部キーを追加する
それでは、冒頭で紹介した構文に従って、実際に外部キーを作成してみましょう。実行するクエリは以下の通りです。
mysql> ALTER TABLE Employee_Table ADD CONSTRAINT fk_Department_Id FOREIGN KEY(Department_Id)
-> REFERENCES Department_Table(Department_Id);
Query OK, 0 rows affected (2.82 sec)
Records: 0 Duplicates: 0 Warnings: 0
これで、Employee_Table の「Department_Id」列に対して、「fk_Department_Id」という名前の外部キー制約が正しく設定されました。
まとめ
- 外部キーの作成には
ALTER TABLE 〜 ADD CONSTRAINT 〜 FOREIGN KEY 〜 REFERENCESを使うのが基本。 - CREATE TABLE の列定義内に
REFERENCESを書いても MySQL では無視されるので注意。 - 制約名をつけておくと、後から削除や変更がしやすくなる。
-
MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説
MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。外部キー制約を追加する基本構文既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecon
-
MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説
本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効