MySQLでテーブル名を変更するSQL文
MySQLを使用していると、テーブル名が規則や標準に合っていないケースによく出会います。テーブルにすでに大量のデータがある場合、もっとも直接的な方法は、テーブルを作り直してデータをインポートすることではなく、既存のテーブルをそのままリネームすることです。
MySQL 5.0以降では、ALTER TABLE ... RENAME TO ... を使ってテーブル名を変更できます。
ALTER TABLE table_name RENAME TO new_table_name;
たとえば、admin_user テーブルを a_user に変更する場合は次のようにします。
ALTER TABLE admin_user RENAME TO a_user;
同じ操作は RENAME TABLE 文でも実行できます。
RENAME TABLE admin_user TO a_user;
実行前には、次の点を確認しておくことをおすすめします。
- 新しいテーブル名が存在しないことを確認し、名前の衝突を避ける。
- アプリケーションコード、ビュー、ストアドプロシージャ、定期実行タスクなどが旧テーブル名を参照していないか確認する。
- 本番環境で操作する前にデータベースをバックアップする。少なくとも対象テーブルはバックアップしておく。
- テーブルが大きい場合や業務システムがそのテーブルにアクセスしている場合は、できるだけアクセスの少ない時間帯に実行する。
まず、次のSQLでテーブルが存在するか確認できます。
SHOW TABLES LIKE 'admin_user';
SHOW TABLES LIKE 'a_user';
リネーム後にも検証します。
SHOW TABLES LIKE 'a_user';
SELECT COUNT(*) FROM a_user;
これで、既存のデータを保持したまま、テーブル名だけを変更できます。
