MySQLでテーブル作成時に制約名を省略した外部キー制約に対し、テーブル作成後に制約名を指定するためには、以下の手順で対応します。
手順
1. 既存の外部キー制約を削除
- 最初に、デフォルトで生成された制約名で設定された外部キー制約を削除します。
2. 新しい制約名を指定して外部キー制約を追加
例えば、orders
テーブルに user_id
カラムを持ち、users
テーブルの id
に対する外部キー制約があるとする
CREATE TABLE users (
id INT PRIMARY KEY
);
CREATE TABLE orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
ここで外部キー制約にデフォルトの名前がつけられますが、これを後で任意の制約名 fk_orders_user_id
に変更したい場合の手順は次のとおり。
2-1. 既存の外部キー制約を削除
デフォルトの制約名は SHOW CREATE TABLE
コマンドで確認できます。
SHOW CREATE TABLE orders;
これにより、現在の外部キー制約の名前が表示されます(例:orders_ibfk_1
など)。この名前を使って、外部キー制約を削除します。
ALTER TABLE orders DROP FOREIGN KEY orders_ibfk_1;
2-2. 新しい制約名で外部キーを再追加
新しい制約名を指定して外部キー制約を追加します。
ALTER TABLE orders
ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id);
補足
-
制約名の確認:
SHOW CREATE TABLE
で確認すると、新しい制約名で設定されていることが確認できます。 - まとめて行うことも可能:複数の外部キー制約がある場合も、同じ手順で削除と追加を行えます。