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つのデータベースが同じファイル
システム上にある限り、テーブルを1つのデータベースから別のものに移動するのに
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 が複合テーブルのリネームをしている最中にエラーが発生すると、全てを元に戻す為に全てのリネームされたテーブルにリバース リネームを行います。