RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
このステートメントは、1 つ以上のテーブルの名前を変更します。
名前変更の操作は原子的に実行されます。つまり、名前の変更が実行されている間、ほかのセッションはどのテーブルにもアクセスできません。たとえば、既存のテーブル old_table
が存在する場合は、次のように、同じ構造を持っているが空である別のテーブル new_table
を作成してから、既存のテーブルをその空のテーブルに置き換えることができます (backup_table
はまだ存在していないと仮定します)。
CREATE TABLE new_table (...);
RENAME TABLE old_table TO backup_table, new_table TO old_table;
このステートメントで複数のテーブルの名前を変更する場合、名前の変更操作は左から右に実行されます。2 つのテーブル名をスワップする場合は、次のように実行できます (tmp_table
はまだ存在していないと仮定します)。
RENAME TABLE old_table TO tmp_table,
new_table TO old_table,
tmp_table TO new_table;
2 つのデータベースが同じファイルシステム上に存在するかぎり、RENAME TABLE
を使用して、あるデータベースから別のデータベースにテーブルを移動できます。
RENAME TABLE current_db.tbl_name TO other_db.tbl_name;
RENAME TABLE
を使用して別のデータベースに移動されたテーブルに関連付けられたトリガーが存在する場合は、ステートメントがエラー Trigger in wrong schema で失敗します。
ビューの名前を変更して別のデータベースに移動しようとしないかぎり、RENAME TABLE
はビューに対しても機能します。
名前変更されたテーブルまたはビュー専用に付与された権限は、どれも新しい名前には移行されません。それらは、手動で変更する必要があります。
RENAME
を実行する場合は、ロックされたテーブルやアクティブなトランザクションが存在していてはいけません。また、元のテーブルに対する ALTER
および DROP
権限と、新しいテーブルに対する CREATE
および INSERT
権限も必要です。
複数テーブルの名前変更で何らかのエラーが発生した場合、MySQL はすべてをその元の状態に戻すために、名前変更されたすべてのテーブルに対して逆方向の名前変更を実行します。
RENAME
を使用して TEMPORARY
テーブルの名前を変更することはできません。ただし、代わりに ALTER TABLE
を使用できます。
mysql> ALTER TABLE orig_name RENAME new_name;
この名前変更操作によってテーブルが別のファイルシステム上にあるデータベースに移動される場合、結果の成功はプラットフォーム固有であり、テーブルファイルを移動するために使用されるベースとなるオペレーティングシステムコールに依存します。