MySQLの外部キー(FOREIGN KEY)とは?作成方法と確認方法を実例付きで解説
外部キー(FOREIGN KEY)とは
外部キーは、テーブル間の整合性(参照整合性)を維持するために使用される制約の一種です。あるテーブルに外部キーを作成すると、そのテーブルは「子テーブル」と呼ばれ、参照先となるもう一方のテーブルは「親テーブル」と呼ばれます。
親テーブル側では、外部キーの参照先となる列が主キー(PRIMARY KEY)として機能します。それでは、実際にテーブルを作成しながら手順を見ていきましょう。
子テーブルの作成
まず、外部キーを持つことになる子テーブル「StudentEnrollment」を作成します。
mysql> create table StudentEnrollment -> ( -> StudentId int, -> StudentName varchar(200), -> StudentFKPK int -> ); Query OK, 0 rows affected (0.91 sec)
親テーブルの作成
続いて、参照先となる親テーブル「College」を作成します。ここでは「StudentFKPK」列を主キーとして設定しています。
mysql> create table College -> ( -> StudentFKPK int, -> CourseId int, -> CourseName varchar(200), -> CollegeName varchar(200), -> primary key(StudentFKPK) -> ); Query OK, 0 rows affected (0.46 sec)
親テーブルでは、列「StudentFKPK」が主キーとして機能します。次に、ALTERコマンドを使用して、子テーブル側に外部キーを追加していきます。
外部キーの追加方法
外部キーを追加するための基本構文は以下の通りです。
ALTER table yourChildTableName add constraint anyConstraintName foreign key(primary key column name for parent table) references College(primary key column name for parent table);
この構文を実際のクエリに当てはめると、次のようになります。
mysql> alter table StudentEnrollment add constraint StudCollegeConst foreign key(StudentFKPK) references College(StudentFKPK); Query OK, 0 rows affected (1.78 sec) Records: 0 Duplicates: 0 Warnings: 0
これで、子テーブル「StudentEnrollment」の「StudentFKPK」列に対して、親テーブル「College」を参照する外部キー制約が設定されました。
外部キー制約の確認方法
外部キー制約が正しく設定されているかどうかは、INFORMATION_SCHEMA.KEY_COLUMN_USAGE テーブルを参照することで確認できます。確認用の構文は以下の通りです。
SELECT TABLE_NAME, COLUMN_NAME,CONSTRAINT_NAME,REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NA FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHER REFERENCED_TABLE_NAME = 'yourParentTableName or your referencedTableName';
上記の構文を実際のクエリに適用したものがこちらです。
mysql> SELECT -> TABLE_NAME, -> COLUMN_NAME, -> CONSTRAINT_NAME, -> REFERENCED_TABLE_NAME, -> REFERENCED_COLUMN_NAME -> FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE -> WHERE -> REFERENCED_TABLE_NAME = 'College';
実行結果は以下のようになります。
+-------------------+-------------+------------------+-----------------------+------------------------+ | TABLE_NAME | COLUMN_NAME | CONSTRAINT_NAME | REFERENCED_TABLE_NAME | REFERENCED_COLUMN_NAME | +-------------------+-------------+------------------+-----------------------+------------------------+ | StudentEnrollment | StudentFKPK | StudCollegeConst | College | StudentFKPK | +-------------------+-------------+------------------+-----------------------+------------------------+ 1 row in set, 2 warnings (0.03 sec)
この結果から、子テーブル「StudentEnrollment」の列「StudentFKPK」に対して、制約名「StudCollegeConst」の外部キー制約が設定されており、親テーブル「College」の同名の列を参照していることが確認できます。
-
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) という構文を記述しても実際の効