1
1

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 でスキーマをリネームしたい

Last updated at Posted at 2023-10-27

2行結論

MySQL でスキーマのリネームは不可能
スキーマ間のテーブル移動は出来るので、RENAME TABLE を使って擬似的にリネームを実現させる

サンプル要件

hotels2022 スキーマを hotels2023 スキーマにリネームしてほしいとの依頼

ただリネームは不可能なので hotels2022 スキーマにある全てのテーブルを、新規で作成したスキーマ hotels2023 に移動 という手段で実現させる

手順まとめ

※上記のサンプル要件に合わせて書いていますので、コピペする場合は自身のスキーマ名とテーブル名に変更して実行してください

移動元のスキーマを新規作成

CREATE DATABASE hotels2023;

hotels2022 の全テーブル名を取得

select 
    table_name
from 
    information_schema.TABLES 
where 
    table_schema = 'hotels2022'
;

-- 実行結果
table_a
table_b
table_c
table_d
table_e
table_f
table_g

RENAME TABLE を使って、hotels2022 から hotels2023 へ移動させる

上記SQLで取得した全テーブル名を利用して、下記のSQLを作成して実行
hotels2022 にあったテーブルが、hotels2023 に移動する

RENAME TABLE
    hotels2022.table_a TO hotels2023.table_a,
    hotels2022.table_b TO hotels2023.table_b,
    hotels2022.table_c TO hotels2023.table_c,
    hotels2022.table_d TO hotels2023.table_d,
    hotels2022.table_e TO hotels2023.table_e,
    hotels2022.table_f TO hotels2023.table_f,
    hotels2022.table_g TO hotels2023.table_g
;

全レコード数が5000万くらいのスキーマで70秒くらい掛かりました

移動元のスキーマを削除

DROP DATABASE hotels2022;

これで擬似的にスキーマのリネームが実現できました

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?