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

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である必要がある点に注意してください。

  1. MySQLでカラムが主キー(PRIMARY KEY)かどうかを確認する方法

    MySQLにおいて、特定のカラムが主キー(プライマリキー)であるかどうかを確認したい場合は、information_schema.columnsテーブルのCOLUMN_NAMEとCOLUMN_KEY=PRIを活用します。これにより、テーブル内のどのカラムが主キーとして設定されているのかを簡単に判定できます。基本構文カラムが主キーかどうかを判定するための基本的な構文は以下の通りです。SELECT column_name, CASE WHEN column_key = PRI THEN メッセージ1 ELSE メッセージ2

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

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