やりたいこと
No.001_name
No.002_name
…
No.999_name
データベースに上記のような「0埋めされた連番+文字列を大量投入」したい。
やり方
以下のテーブルを作成
1 2 3 4 5 6 7 |
create table test_table( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `count` int(11) COMMENT 'ループのカウント', `count2` int(11) COMMENT 'ループのカウントその2', `name` varchar(45) COMMENT '名前', PRIMARY KEY (`id`) ); |
ストアドプロシージャを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
drop procedure if exists loop_insert; delimiter // create procedure loop_insert(in maxNum int) begin declare i int default 0; declare str varchar(45) ; while i < maxNum do set i = i + 1; set str = lpad(i, 3, '0'); insert into test_table (count, count2, name) values(i, str, concat('No.', str, '_name')); end while; end // |
ストアドプロシージャとは
サーバ上に保存される一連のSQL。SQLにおける関数のようなもの。
似たようなものにストアドファンクションがある。プロシージャには戻り値がなく、ファンクションは戻り値あり。
作成したプロシージャに引数を渡して呼び出す。
1 |
call loop_insert(11) |
データ投入完了。引数に11を指定したのでNo.011_nameまで作成されている。
id | count | count2 | name |
---|---|---|---|
1 | 1 | 1 | No.001_name |
2 | 2 | 2 | No.001_name |
… | |||
11 | 11 | 11 | No.011_name |
ポイント
データ型がintのカラム(今回はcount2)には0埋めした数値は記録できない。
0埋めした数値を記録したいときは文字型を利用しましょう。