知っとくと便利なので自分用にメモ。
1 or 2 などの2値をランダムに設定する
1 2 3 4 5 6 |
update posts set status = case floor(rand() * 2) when 0 then 1 when 1 then 2 end |
※この例だと1 or 2がセットされる。when
、then
を増やしていけば複数の値に対応可能。
datetime型をランダムに設定
- 現在時刻から1年後までの日付をランダムに生成
1 2 3 |
update posts set updatedAt = now() + interval (rand() * 365) day |
- 指定日時から1年間の日付をランダムに生成
1 2 3 |
update posts set updatedAt = concat(date_format(date_add(date('2010-06-06'), interval (rand() * 365) day), '%Y-%m-%d'), ' ', cast(time(sec_to_time(ceil((rand() * 86400)))) as char)) |
※2010-06-06をスタートとした場合
ランダムな文字列を生成する
- 32文字のランダムな文字列を生成
1 2 3 |
update posts set title = substring(md5(rand()), 1, 32) |
- 100文字のランダムな文字列を生成
1 2 3 |
update posts set title = substring(sha2(md5(rand()), 512), 1, 100) |
- 500文字!
1 2 3 |
update posts set title = substring(concat(sha2(md5(rand()), 512), sha2(md5(rand()), 512), sha2(md5(rand()), 512), sha2(md5(rand()), 512), sha2(md5(rand()), 512)), 1, 500) |
※これ以上はconcat()をマンパワーで足していくくらいしか思い浮かばない。単に長さがほしいだけならrepeat()とかでもいいかも。
100万件のレコードを生成する
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
insert into posts () values (); -- 1 行 insert into posts (id) select 0 from posts; -- 2 行 insert into posts (id) select 0 from posts; -- 4 行 insert into posts (id) select 0 from posts; -- 8 行 insert into posts (id) select 0 from posts; -- 16 行 insert into posts (id) select 0 from posts; -- 32 行 insert into posts (id) select 0 from posts; -- 64 行 insert into posts (id) select 0 from posts; -- 128 行 insert into posts (id) select 0 from posts; -- 256 行 insert into posts (id) select 0 from posts; -- 512 行 insert into posts (id) select 0 from posts; -- 1024 行 insert into posts (id) select 0 from posts; -- 2048 行 insert into posts (id) select 0 from posts; -- 4096 行 insert into posts (id) select 0 from posts; -- 8192 行 insert into posts (id) select 0 from posts; -- 16384 行 insert into posts (id) select 0 from posts; -- 32768 行 insert into posts (id) select 0 from posts; -- 65536 行 insert into posts (id) select 0 from posts; -- 131072 行 insert into posts (id) select 0 from posts; -- 262144 行 insert into posts (id) select 0 from posts; -- 524288 行 insert into posts (id) select 0 from posts; -- 1048576 行 |
※20行繰り返すところがポイント。