MySQL エラー 1215: 外部キー制約を追加できません - 原因と解決方法
MySQL エラー 1215: 外部キー制約を追加できません
このエラーは、MySQLで外部キー制約を追加しようとした際に発生します。外部キー制約は、あるテーブルの列を別のテーブルの列と関連付けるための制約です。このエラーが発生する理由はいくつか考えられます。
原因
- 参照先のテーブルが存在しない
- 参照先の列のデータ型が一致しない
- 外部キー列にNULL値が含まれている
- 親子関係に循環が生じている
解決方法
原因に応じて、以下の解決方法を試してください。
- 参照先のテーブルが存在することを確認する
詳細
外部キー制約は、あるテーブルの列を別のテーブルの列と関連付けるための制約です。これにより、データの整合性を保つことができます。
エラーメッセージ
ERROR 1215 (HY000): Cannot add foreign key constraint
SHOW TABLES
コマンドを実行して、参照先のテーブルが存在することを確認してください。
参照先の列のデータ型が、外部キー列のデータ型と一致していることを確認してください。
外部キー列にNULL値が含まれている場合、外部キー制約を追加することはできません。外部キー列にNULL値が含まれている場合は、その値を削除するか、別の値に置き換える必要があります。
テーブルAがテーブルBを参照し、テーブルBがテーブルAを参照しているような親子関係の場合、循環が生じてしまいます。このような循環が生じている場合は、外部キー制約を追加することはできません。
このエラーメッセージが表示された場合は、上記の解決方法を試して問題を解決してください。問題が解決しない場合は、MySQLのフォーラムやサポートに問い合わせてください。
-- テーブルの作成
CREATE TABLE `親テーブル` (
`id` INT PRIMARY KEY,
`名前` VARCHAR(255)
);
CREATE TABLE `子テーブル` (
`id` INT PRIMARY KEY,
`親テーブル_id` INT,
FOREIGN KEY (`親テーブル_id`) REFERENCES `親テーブル` (`id`)
);
-- 外部キー制約の追加
ALTER TABLE `子テーブル`
ADD CONSTRAINT `fk_親テーブル` FOREIGN KEY (`親テーブル_id`) REFERENCES `親テーブル` (`id`);
このコードを実行すると、親テーブル
と子テーブル
が作成され、子テーブル
の親テーブル_id
列に外部キー制約が追加されます。
外部キー制約を追加する他の方法
テーブル作成時に外部キー制約を指定する
テーブルを作成する際に、CREATE TABLE
ステートメントで外部キー制約を指定することができます。
CREATE TABLE `子テーブル` (
`id` INT PRIMARY KEY,
`親テーブル_id` INT,
FOREIGN KEY (`親テーブル_id`) REFERENCES `親テーブル` (`id`)
);
GUIツールを使用する
MySQL WorkbenchなどのGUIツールを使用して、外部キー制約を追加することができます。
データベース管理ツールを使用する
phpMyAdminなどのデータベース管理ツールを使用して、外部キー制約を追加することができます。
- 少数のテーブルに外部キー制約を追加する場合は、
ALTER TABLE
ステートメントを使用するのが最も簡単です。 - 大量のテーブルに外部キー制約を追加する場合は、スクリプトを作成して実行するのが効率的です。
- GUIツールやデータベース管理ツールを使用すると、視覚的に操作できるので、初心者でも簡単に外部キー制約を追加することができます。
外部キー制約を追加する前に、以下の点に注意してください。
- 参照先の列のデータ型が一致している必要があります。
mysql foreign-keys