データベースは一度作成したら、あとから変更するのがものすごく大変になるので、作成前にしっかりと設計しておく必要があります。ただ、そうは言っても、あとから新しい要素が出てきたり、前提が変わったりして変更を余儀なくされることもあります。

MySQLでは以前の記事で紹介したALTER TABLE文や今から紹介する方法により、あとからでもテーブル構造などを変更することができるようになっています。

テーブル定義をコピーする

既存のテーブルを別名でコピーしたい場合、以下のように実行します。

> CREATE TABLE stuff_copy LIKE stuff;

構文は簡単で「CREATE TABLE <コピー先テーブル> LIKE <コピー元テーブル>」となります。

この文の注意点として、コピーされるのはあくまでテーブル定義のみであり、テーブルの中に格納されているデータ(行)はコピーされません。

> SELECT * FROM stuff_copy;
Empty set (0.03 sec)

テーブルをデータを含めてコピーする

コピー元のテーブルに含まれるデータを含めてコピーしたい場合は、INSERT ~ SELECT文を使います。コピー元のテーブルでSELECTしたデータをコピー先のテーブルにINSERTする方法です。

> INSERT INTO stuff_copy (id,name,description,age) SELECT id,name,description,age FROM stuff;

VALUES句以降に対応する部分が、SELECT文になったようなイメージです。

コピーして新しく作成したテーブルのデータを見てみましょう。

> SELECT * FROM stuff_copy;
+----+------+--------------------------+------+
| id | name | description              | age  |
+----+------+--------------------------+------+
|  1 | 大崎 | 会長                     |   66 |
|  2 | 岡本 | 社長                     |   53 |
|  3 | 松本 | ダウンタウン、浜田の相方 |   55 |
+----+------+--------------------------+------+