用存储过程创建大量带一定规则(条码号)的数据

最近遇到一个需求是需要构造百万级数据测试查询速度,导出数据,统计等功能是否正常,其中条码号是从0000000000001开始累加,此时需要创建两条存储过程插入数据库,一条生成条码号,一条插入数据到数据库。

创建生成条码号的sql函数:

CREATE DEFINER=`root`@`%` PROCEDURE `genarate_code`(OUT code1 varchar(30))
BEGIN
DECLARE current_number INT DEFAULT 0;
DECLARE new_number INT;
DECLARE suffix_number varchar(12) DEFAULT '000000000000';
SELECT MAX(code) INTO current_number FROM a01_archbox;
IF current_number IS NULL THEN
SET new_number = 1;
ELSE
SET new_number = current_number + 1;
END IF;
set suffix_number = substring(suffix_number,1,13-length(new_number));
set code1 = concat(suffix_number,new_number);

END

该函数生成规则按已有条码号开始生成,若没有则从0000000000001开始,若是生成类似订单号的生成规则,则按订单号生成规则调整即可,例如加上日期流水号等规则生成

存储过程声明变量方式:DECLARE current_number INT DEFAULT 0;

存储过程返回值需在函数名称加变量:genarate_code(OUT code1 varchar(30))

运行插入数据的sql函数:

CREATE DEFINER=`root`@`%` PROCEDURE `add_box`()
BEGIN
DECLARE i int DEFAULT 1;
declare c varchar(30) DEFAULT 'test';
-- 开启事务
START TRANSACTION;
WHILE i<10 DO
    call genarate_code(@code);
    -- select @code;

    insert into a01_archbox(`id`,`code`,`category_id`,`store_id`,`qu_no`,`col_no`,`zy_no`,`le_no`,`div_no`,`sx_no`,`lend_state`,`c403`,`box_type`) values(UUID_SHORT(),@code,6,1,floor(rand()*5)+1,floor(rand()*3)+1,floor(RAND()*1+1.5),floor(RAND()*3)+1,floor(rand()*3)+1,0,1,concat(c,i),7);
    set i=i+1;
END WHILE;
-- 提交事务
COMMIT;

END

其中call genarate_code(@code);是调用生成条码的函数,@code是函数生成条码后的返回值

floor(rand()*3)+1是随机生成1~3的随机正整数

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简单的事做好就不简单

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值