MySQLでレコードをコピーする方法を説明します。
レコードを複製する方法 (主キーを設定していない場合)
まずは、テーブルに主キーが設定されていない場合です。
以下のようなpersonテーブルを考えます。
ID | NAME | AGE |
---|---|---|
001 | 山本 | 25 |
002 | 田中 | 23 |
003 | 鈴木 | 30 |
ここで、IDが001番のレコードを複製したいとします。
現実にはあまりないと思いますが、IDが主キーではなく重複が許されている場合は、以下のコマンドでレコードを複製できます。
INSERT INTO person SELECT * FROM person WHERE id = "001";
レコードを複製する方法 (主キーを設定している場合)
では、主キーを設定している場合はどうでしょう。
ID001番のデータをID004番としてコピーしてみます。
主キーが設定されている場合は、主キーが重複しているデータを挿入することができないので、コマンドは若干複雑になります。
CREATE TEMPORARY TABLE tmp SELECT * FROM person WHERE id = "001"; UPDATE tmp SET id = "004"; INSERT INSTO person SELECT * FROM tmp; DROP TABLE tmp;
上のSQL文を解説すると、tmpというテーブルを一時的に作り、そこにデータをコピーしてきて、主キーであるIDの値を変えてから、personテーブルに挿入する、ということをしています。
なお、「CREATE TEMPORARY TABLE」コマンドで作られるテーブルは一時テーブルと呼ばれます。通常のテーブルと違い、セッションが切れると消えるという特徴があります。
使いどころは少ないですが、覚えておくと稀に役に立つ方法です。