RENAME TABLE 構文

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つのデータベースが同じファイル システム上にある限り、テーブルを1つのデータベースから別のものに移動するのに RENAME TABLE を利用する事ができます。

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

テーブルと関連し、RENAME TABLE を利用して別のデータベースに移動されたトリガがあると、ステートメントは Trigger in wrong schema というエラーになります。

RENAME TABLE はまた、別のデータベース内にビューをリネームしようとしなければ、ビューに対しても機能します。

リネームされたテーブルやビューに与えられた権限は、新しい名前に移動しません。それらは手動で変更しなければいけません。

RENAME を実行する時、ロックされたテーブルやアクティブなトランザクションを持つ事はできません。また、元テーブル上に ALTERDROP 権限を、新しいテーブル上には CREATEINSERT 権限を持つ必要があります。

もし MySQL が複合テーブルのリネームをしている最中にエラーが発生すると、全てを元に戻す為に全てのリネームされたテーブルにリバース リネームを行います。