MySQLのストアドプロシージャでテストデータを作る
テストデータを大量に作る際、サブクエリやシェルを書いたりしてましたが
ストアドプロシージャを使って作ってみました。
参考URL http://d.hatena.ne.jp/IT7C/20100801/1280596927
DROP PROCEDURE insert_generate_series; DELIMITER ]] CREATE PROCEDURE insert_generate_series( IN target VARCHAR(255), IN value VARCHAR(255), IN start_num INT, IN end_num INT, IN step INT ) BEGIN SET @num:= start_num; SET @sql:= concat('INSERT INTO ',target,' VALUES '); SET SESSION sql_notes=0; DROP temporary TABLE IF EXISTS t_values; SET SESSION sql_notes=1; CREATE temporary TABLE t_values (val VARCHAR(255)); SET @buf_size:=length(@sql); WHILE @num <= end_num DO SET @buf:=concat('(',REPLACE(value,'@num',@num),')'); INSERT INTO t_values VALUES ( @buf ); SET @buf_size:=@buf_size + LENGTH(@buf) + 1; SET @num:=@num + step; END while; SET SESSION group_concat_max_len=@buf_size; -- SET SESSION max_allowed_packet=@buf_size; SET @sql:= concat(@sql,(SELECT group_concat(val) FROM t_values)); PREPARE stmt from @sql; EXECUTE stmt; END; ]] DELIMITER ;
データを追加する場合は以下のように実行
CALL insert_generate_series( 'log(data,created_at,updated_at)', "concat(md5(@num),@num),'2011-10-01 05:00:00','2011-10-01 05:00:00'",1,10000,1);
その他使いそうなコマンドをメモ
-- プロシージャー一覧 SHOW PROCEDURE STATUS ; -- プロシージャー詳細 SHOW PROCEDURE CODE insert_generate_series; -- プロシージャー一覧と詳細 SELECT * FROM ROUTINES;