MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説
MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。
外部キー制約を追加する基本構文
既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。
alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecondTableNamePrimaryKey`) references yourFirstTableName(yourFirstTablePrimaryKeyColumnName);
- yourSecondTableName:外部キーを追加する側(子テーブル)のテーブル名
- yourConstraintName:任意の制約名
- yourFirstTableName:参照される側(親テーブル)のテーブル名
サンプルテーブルの作成
それでは、実際に動きを確認してみましょう。まずは親テーブルとなる最初のテーブルを作成します。
mysql> create table demo65 -> ( -> id int not null primary key, -> name varchar(20) -> ); Query OK, 0 rows affected (0.57 sec)
次に、子テーブルとなる2つ目のテーブルを作成します。
mysql> create table demo66 -> ( -> user_id int not null primary key, -> address varchar(200) -> ); Query OK, 0 rows affected (1.80 sec)
主キーを外部キーとして参照するクエリ
ここからが本題です。demo66テーブルの「user_id」列に対して、demo65テーブルの主キー「id」を参照する外部キー制約を追加します。
mysql> alter table demo66 -> add constraint `id_fk` -> foreign key(`user_id`) -> references demo65(id); Query OK, 0 rows affected (3.76 sec) Records: 0 Duplicates: 0 Warnings: 0
SHOW CREATE TABLEで制約を確認する
外部キー制約が正しく追加されたかどうかは、SHOW CREATE TABLEコマンドでテーブル定義を確認するとわかります。
mysql> show create table demo66;
実行結果は以下のとおりです。
+--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | demo66 | CREATE TABLE `demo66` ( `user_id` int NOT NULL, `address` varchar(200) DEFAULT NULL, PRIMARY KEY (`user_id`), CONSTRAINT `id_fk` FOREIGN KEY (`user_id`) REFERENCES `demo65` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +--------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec)
出力結果に「CONSTRAINT `id_fk` FOREIGN KEY (`user_id`) REFERENCES `demo65` (`id`)」と表示されていることから、demo66テーブルの主キー「user_id」が、demo65テーブルの主キー「id」を外部キーとして正しく参照できていることが確認できます。
まとめ
このように、ALTER TABLE文とADD CONSTRAINT句を組み合わせることで、既存のテーブルにも後から簡単に外部キー制約を追加できます。なお、外部キーを使用する場合はストレージエンジンがInnoDBである必要がある点に注意してください。
-
MySQLでカラムが主キー(PRIMARY KEY)かどうかを確認する方法
MySQLにおいて、特定のカラムが主キー(プライマリキー)であるかどうかを確認したい場合は、information_schema.columnsテーブルのCOLUMN_NAMEとCOLUMN_KEY=PRIを活用します。これにより、テーブル内のどのカラムが主キーとして設定されているのかを簡単に判定できます。基本構文カラムが主キーかどうかを判定するための基本的な構文は以下の通りです。SELECT column_name, CASE WHEN column_key = PRI THEN メッセージ1 ELSE メッセージ2
-
MySQLで外部キー(FOREIGN KEY)を使う方法|InnoDBの制約とALTER構文を解説
本記事では、MySQLにおける外部キー(FOREIGN KEY)の基本的な考え方と、実際の設定方法をサンプルSQL付きで解説します。 MySQLの外部キーの基本 InnoDBテーブルは、外部キー制約(FOREIGN KEY制約)のチェックをサポートしています。ただし、単に2つのテーブルを結合(JOIN)するだけであれば、外部キー制約は必須ではありません。外部キーは、テーブル間の参照整合性を保証したい場合に活用する仕組みです。 一方で、InnoDB以外のストレージエンジンを使用している場合は注意が必要です。REFERENCES tableName(colName) という構文を記述しても実際の効