江の島エンジニアBlog
tips

MySQLでインデックスや外部キー制約をリネームする

テーブルを置き換える場合などにはテーブル名だけでなく、インデックスや外部キー制約も名前変更する必要があります。MySQL5.7系だとRENAME INDEXができるのですが、5.6系だと残念ながら削除&追加するしかないので、その方法をまとめておきます。 (2015/03/26)

MySQLでインデックスや外部キー制約をリネームする

new_というプレフィックスのついたインデックスや外部キー制約からnew_を外す場合の例を紹介します。

インデックスの追加

ALTER TABLE posts ADD KEY index_posts_on_category_id(category_id);
ALTER TABLE posts ADD UNIQUE KEY index_posts_on_url(url);

ADD KEYまたはADD UNIQUE KEYで追加します。

インデックスの削除

ALTER TABLE posts DROP KEY new_index_posts_on_category_id;
ALTER TABLE posts DROP KEY new_index_posts_on_url;

DROP KEYで削除します。

外部キー制約の追加

ALTER TABLE posts
  ADD CONSTRAINT
    posts_blog_id_fk
      FOREIGN KEY(blog_id)
      REFERENCES blogs;

ADD CONSTRAINT * FOREIGN KEY(*) REFERENCES *で追加します。

外部キー制約の削除

ALTER TABLE posts DROP FOREIGN KEY new_posts_blog_id_fk;

DROP FOREIGN KEYで削除します。

まとめてみると

それぞれの追加&削除をまとめて実行するならこんな感じになります。

ALTER TABLE posts
  ADD KEY index_posts_on_category_id(category_id),
  ADD UNIQUE KEY index_posts_on_url(url),
  DROP KEY new_index_posts_on_category_id,
  DROP KEY new_index_posts_on_url,
  ADD CONSTRAINT
    posts_blog_id_fk
      FOREIGN KEY(blog_id)
      REFERENCES blogs,
  DROP FOREIGN KEY new_posts_blog_id_fk;

以上、MySQLでのインデックス&外部キー制約のリネーム方法でした。

  • このエントリーをはてなブックマークに追加
  • follow us in feedly