RENAME TABLEtbl_name
TOnew_tbl_name
[,tbl_name2
TOnew_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 TABLEcurrent_db.tbl_name
TOother_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;