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;
これで擬似的にスキーマのリネームが実現できました