MySQL TIPS 4 ストアドプロシージャで指定した数のダミーデータを用意する

MySQLでブログを書いていてパフォーマンス系の記事を書こと思った時にダミーデータの用意をするのが面倒です。generate_series*1があれば簡単なのですがMySQLにはないのでストアドプロシージャで汎用的にダミーデータを生成できるものを作ってみました。以後はこちらを使ってダミーデータを生成するようにします。phpMyAdmin上からは『Error 1312 (0A000): PROCEDURE proc_name can't return a result set in the given context』となって使えないのでmysqlコマンドライン上から実行してください。あと、生成したgenerate_seriesの値を複数使えなかったり、valuesをまとめて実行してないのでパフォーマンス的に遅かったりすると思いますが、それはまた時間があったら手直しします。腕に自信のある人は自分で直してみてください。

DROP   PROCEDURE insert_generate_series;
delimiter //
CREATE PROCEDURE insert_generate_series(
   IN target    VARCHAR(255) , -- insert対象のテーブル、カラム名を指定
   IN value     VARCHAR(255) , -- valuesを記述 ? がgenerate_seriesで生成された値になる
   IN start_num INT ,          -- 開始値
   IN end_num   INT ,          -- 終了値
   IN step      INT            -- 増分
)
begin
  set @num:= start_num;
  while @num <= end_num do
    set @sql:=concat('INSERT INTO ',target,' VALUES ( ', value , ' )');
    select @sql;
    prepare stmt from @sql;
    execute stmt using @num; 
    set @num:=@num + step;
  end while;
end;
//
delimiter ;
call insert_generate_series('user(email)','concat(md5(?),"@example.com")',1,10000,1);

*1:以前、擬似的に再現する方法を紹介しましたが、前提として十分なレコードを持つテーブルが存在しないと使えません。