427
414

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2014-07-30

MySQLで大量のダミーデータをテスト用に必要だったため、WEBをググって情報を集めてみました。
SQLだけで実現しているので使いやすいかと思います。

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

INT(1〜100の範囲)

SELECT CEIL(RAND() * 100);

CHAR(10文字)

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

CHAR(特定文字列とランダム数値の連結)
※ランダム数値を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万件レベルのデータのテストデータを作成する方法

427
414
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
427
414

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?