MySQL

MySQLで簡単にランダムなテストデータを作成する方法

More than 3 years have passed since last update.

MySQLで大量のダミーデータをテスト用に必要だったため、WEBをググって情報を集めてみました。

SQLだけで実現しているので使いやすいかと思います。


データ型別のランダムデータ作成方法

INT(1〜100の範囲)

SELECT CEIL(RAND() * 100);

CHAR(10文字)

SELECT SUBSTRING(MD5(RAND()), 1, 10);

CAHR(特定文字列とランダム数値の連結)

※ランダム数値をAUTO_INCREMENT値にすればテーブルでユニークな文字列となる

SELECT CONCAT('ユーザー', CEIL(RAND() * 100));

DATE(2014-07-01から31日の範囲)

SELECT DATE_ADD('2014-07-01', INTERVAL 31 * RAND() DAY);

DATETIME(2014-07-01 00:00:00から31日の範囲)

SELECT ADDTIME(CONCAT_WS(' ','2014-07-01' + INTERVAL RAND() * 31 DAY, '00:00:00'), SEC_TO_TIME(FLOOR(0 + (RAND() * 86401))));


大量のテストデータの作成方法

テーブルを作成

CREATE TABLE item (

id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(10),
description VARCHAR(30),
price INT UNSIGNED,
created_at DATETIME
);

テーブルに大量の空データを挿入

INSERT INTO item () VALUES (); --1行作成

INSERT INTO item (id) SELECT 0 FROM item; --2行になる
INSERT INTO item (id) SELECT 0 FROM item; --4行になる
INSERT INTO item (id) SELECT 0 FROM item; --8行になる
INSERT INTO item (id) SELECT 0 FROM item; --16行になる
-- 20回繰り返すと100万行になる

空データを型に合わせてランダムな値に更新

UPDATE item SET

name = CONCAT('商品', id),
description = SUBSTRING(MD5(RAND()), 1, 30),
price = CEIL(RAND() * 10000),
created_at = ADDTIME(CONCAT_WS(' ','2014-01-01' + INTERVAL RAND() * 180 DAY, '00:00:00'), SEC_TO_TIME(FLOOR(0 + (RAND() * 86401))));


参考にしたサイト

[mysql] 日付と文字列(単語)ランダムデータの入力

さくっと100万件レベルのデータのテストデータを作成する方法