MariaDB:テーブル名を変更するSQL構文と例

テーブル名を変更するシチュエーション

今まで使用していたテーブルを大きくカラム構成を変更したりする際に、alter文を使うのではなく新しく作り直したい場合、
同じテーブル名で作成することができないので、一度もとのテーブル名を変更する(dropできないのであれば)ことがあります。

テーブル名を変更する具体例

それでは具体例をみていきましょう。
まずは今回サンプルで使う「sample」テーブルを作成します。

create table sample(
    id int primary key auto_increment,
    val varchar(255)    
);
insert into sample(val) values('a');
insert into sample(val) values('b');
insert into sample(val) values('c');

こんな感じでデータが登録されます。

select * from sample;
+----+------+
| id | val  |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+

ではこのsampleテーブルをsample_bkテーブルに変更しましょう。

alter table sample rename to sample_bk;
select * from sample_bk;
+----+------+
| id | val  |
+----+------+
|  1 | a    |
|  2 | b    |
|  3 | c    |
+----+------+

テーブル名が変更され、中身はそのままであることがわかります。

もう一つ「rename」文を使う、という方法もありますのでみてみましょう。

rename table sample to sample_bk;

※先ほどsampleテーブルをsample_bkに変更しましたので、このSQLを実行するにはsampleテーブルに名前を戻しておいてください。

「alter」文同様に名前が変更されると思います。
このrename文がalter文と違うのは、一度に複数テーブルに対してリネームを行えるという点です。
試しにふたつのテーブルをリネームしてみましょう。

create table sample2(
    id int primary key auto_increment,
    val varchar(255)    
);
insert into sample2(val) values('a');
insert into sample2(val) values('b');
insert into sample2(val) values('c');

「sample2」というテーブルを作成します。

show tables;
+---------------------+
| Tables_in_rensyu_db |
+---------------------+
| sample              |
| sample2             |
+---------------------+

※該当のテーブル以外は表示していません。

今度は「sample」を「sample_bk」に、「sample2」を「sample2_bk」にまとめてリネームしてみましょう。

rename table sample to sample_bk, sample2 to sample2_bk;
show tables;
+---------------------+
| Tables_in_rensyu_db |
+---------------------+
| sample2_bk          |
| sample_bk           |
+---------------------+

1文で2つともリネームされました。

まとめ「別テーブルの内容をinsertするSQL」の構文

最後に構文をまとめておきます。

「alter」文を用いて、1つのテーブルをリネームする場合:

alter table 【もとのテーブル名】 rename to 【リネーム後のテーブル名】

「rename」文を用いて、1つのテーブルをリネームする場合:

rename table 【もとのテーブル名】 to 【リネーム後のテーブル名】

「rename」文を用いて、複数テーブルをまとめてリネームする場合:

rename table 【もとのテーブル名】 to 【リネーム後のテーブル名】, 【もとのテーブル名2】 to 【リネーム後のテーブル名2】, ・・・・