テーブル名を変更するシチュエーション
今まで使用していたテーブルを大きくカラム構成を変更したりする際に、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】, ・・・・