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