需求内容是生成固定长度的字符串,首位必须是指定数字开头。实现的存储过程和函数如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_data`(IN iteme INT)
BEGIN
DECLARE var INT DEFAULT 1;
start transaction;
WHILE var<iteme
DO
insert into table (col1,col2,col3,col4) values (rand_string(10),1001,'2015-07-10 16:00:00',0);
SET var=var+1;
END WHILE;
commit;
END
CREATE FUNCTION `rand_string`(n int) RETURNS varchar(255) CHARSET utf8
BEGIN
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n
DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END
函数为网上找的的版本:http://xue.uplook.cn/database/mysqlsjk/2392.html
直接call proc_data(6);即可
bug1:生成大量数据时唯一键冲突较多,目前解决办法是多次运行。 o(╯□╰)o
bug2 : 生成字符串会有小于指定位数的,例如需要生成的随机数是10位,可能有4位,5位,6位的出现.
ps:bug2已找到原因,在生成手机使用的随机符时,为了方便辨认,去掉了数字1和字母I,于是chars_str的长度由62缩小为60.在运算时需要将函数FLOOR(1 + RAND()*62也进行相应的修改,即FLOOR(1 + RAND()*60.
相关文章
- 06-18SQL存储过程基于字段名传入的字符串拼接.
- 06-18随机生成不重复的字符串
- 06-18生成一个16位的随机数字
- 06-18random 模块 python 生成大写字母,小写字母及数字的5位随机数
- 06-18#在26个大小写字母(52个),以及9个数字组成的字符列表中,随机生成10个8位密码
- 06-18在26个大小写字母(52个),以及9个数字组成的字符列表中,随机生成10个8位密码
- 06-18SQLServer如何快速生成100万条不重复的随机8位数字
- 06-18生成一个字母数字组合的n位随机码、随机数、随机字符串
- 06-18在论坛中出现的比较难的sql问题:22(字符串拆分、字符串合并、非连续数字的间隔范围、随机返回字符串)
- 06-18随机生成26个字母中(一个或多个)的字母、数字