さくっと100万件レベルのデータのテストデータを作成する方法
問題
大量のテスト用データのあるテスト環境を作りたいんだけど、大量のデータを作るのって大変ですか?
答え
100万件レベルのデータのテストデータをさくっと作成する方法。
MySQLの場合。
primary key が AUTO_INCREMENT なら
# テーブル作る create table a (id int primary key auto_increment, xxx varchar(10)); # 1レコード作る insert into a () values (); # 倍々する insert into a (id) select 0 from a; -- 2行になる insert into a (id) select 0 from a; -- 4行になる insert into a (id) select 0 from a; -- 8行になる insert into a (id) select 0 from a; -- 16行になる -- 20回繰り返したら 100万件! # 100万レコード作ったら、update文でそれらしい内容に変えていく update a set xxx = concat('会員', id); -- xxx を 会員1、会員2、会員3… にする
プライマリキーが連番ではない場合
# 空のテーブル作る create table 注文テーブル (~~テーブル定義~~); # 1行データ入れる insert into 注文テーブル(注文番号) values (0); # 2行にする insert into 注文テーブル (注文番号) select 注文番号 + 1 from 注文テーブル; # 4行にする insert into 注文テーブル (注文番号) select 注文番号 + 2 from 注文テーブル; # 8行にする insert into 注文テーブル (注文番号) select 注文番号 + 4 from 注文テーブル; # 以下続く(AUTO_INCREMENTでないと面倒) insert into 注文テーブル (注文番号) select 注文番号 + 8 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 16 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 32 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 64 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 128 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 256 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 512 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 1024 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 2048 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 4096 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 8192 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 16384 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 32768 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 65536 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 131072 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 262144 from 注文テーブル; insert into 注文テーブル (注文番号) select 注文番号 + 524288 from 注文テーブル; # レコードは100万件になったので、あとはupdate文でそれらしいデータにしていく update 注文テーブル set 会員番号 = concat('ABC', 注文番号); update 注文テーブル set 会員氏名 = concat('会員', 注文番号); update 注文テーブル set 電話番号 = ceil(rand() * 10000000000);
774 2019年3月24日 17:34
seletになってました!
yoshimura 2019年3月28日 12:14
ご指摘ありがとうございます。 修正しました!