STERFIELD

2016/11/02

データベースのレコードを一発で複製してみる

データベースのレコードを一発で複製してみる

やりたいこと

既にあるレコード(データ)を複製したい。
だけど重複してはいけないものがあるから、そのカラムだけは一部置き換えたい。

これを一回ダンプ取って、
それを編集して、
またリストアする・・・と言う手順を踏まずクエリを工夫して実施する

実際に発行したクエリ

以下のようなレコードがあるとする

これを複製しつつtypeを+1し、nameは末尾に2をつけてみる。

1. SELECT以下で既存の全てのレコードを引っ張ってくる
2. id はNULL固定(自動連番が割り振られる)
3. name は末尾に2を文字として追加するので、文字列結合のCONCATを使用
4. birthday はそのまま
5. typeは+1したものを囲って AS typeとする

一度のクエリでもサブクエリを使用すれば結構色々出来ます。

外部キー成約で躓くとき

INSERTを先に済ませてあとで外部キー関連を直したいときもあります。

そう言ったときのおまじない

とすれば外部キー制約無しでデータの更新や削除が出来ます。

必ず終わったら
SET FOREIGN_KEY_CHECKS = 1;
として制約を元に戻してやること。

自身を参照してアップデートが出来ないとき

サブクエリでのSELECTしたものと同じテーブルにINSERT出来ないケースもあります。

そう言った時は

のようなクエリを

のように一度一時テーブルとして認識させれば回避出来ます

Author Profile

著者近影

スターフィールド編集部

SHARE

合わせて読みたい