Webエンジニアのメモ帳

技術的な話を中心に書いています。

【MySQL】主キーだけ変えてレコードをコピーする

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」コマンドで作られるテーブルは一時テーブルと呼ばれます。通常のテーブルと違い、セッションが切れると消えるという特徴があります。

使いどころは少ないですが、覚えておくと稀に役に立つ方法です。