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

【初心者向け】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 では無視されるので注意。
  • 制約名をつけておくと、後から削除や変更がしやすくなる。
  1. MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説

    MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。外部キー制約を追加する基本構文既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecon

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

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