ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

データベースのデータコピー

テーブル内で列をコピー

テーブル内で列から列へコピーしたいときがあります。
今回初期設定した列が実は違っていたので、一括でコピーしたくなりました。
方法は以下のとおりでした。

UPDATE member SET newcol = oldcol WHERE id = 11;

f:id:AJYA:20171006235827j:plain
photo credit: Rahul Kumar Ghosh Rahul Kumar Ghosh via photopin (license)

テーブル内で行をコピー

テーブル内で行から行へコピーして一部変更するのは、3手順必要でした。

まず、一時的に利用するテーブルを作作成します。

CREATE TABLE tmp_member AS (SELECT id, name, mail FROM member WHERE id = 11);

次は一時的に利用するテーブルのデータを変更します。

UPDATE tmp_member SET name = 30, mail = replace( mail, 'abc', 'xyz');

複数回変更することも可能です。

最後は元のテーブルにコピーします。

INSERT INTO member (name, mail) SELECT name, mail FROM tmp_member ORDER BY id;

以前使ったデータを使いまわすけれど一部変更しなければいけないときは役に立ちます。