生成随机字符+数字的存储过程

需求内容是生成固定长度的字符串,首位必须是指定数字开头。实现的存储过程和函数如下:
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.


上一篇:晓生:这个朋友我交定了!


下一篇:Mysql开发规范