1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MySQL】外部キー制約の制約名をあとから変更する場合

Posted at

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 で確認すると、新しい制約名で設定されていることが確認できます。
  • まとめて行うことも可能:複数の外部キー制約がある場合も、同じ手順で削除と追加を行えます。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?