利用mysql的存储过程实现唯一订单号

利用mysql的存储过程实现唯一订单号

目的:要实现:sjyyyyMMdd+2位随机数+5位顺序号+3位随机数 的一个订单号

1.创建一个表

CREATE TABLE `tb_billlo` (
  `name` varchar(100) NOT NULL,
  `billloNo` int(5) DEFAULT NULL,
  `next` int(5) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.插入一条数据

INSERT INTO `tb_billlo` VALUES ('sjyh_billlo', '1', '1');

3.创建一个递增的序列号
函数名:next_billlo_num

CREATE DEFINER = `root`@`localhost` FUNCTION `next_billlo_num`() RETURNS varchar(20) CHARSET utf8
BEGIN

UPDATE tb_billlo SET billloNo =IF(last_insert_id(billloNo+next)>= 99998,0,last_insert_id(billloNo+next)) WHERE name='sjyh_billlo'; 
RETURN last_insert_id();
    
END

4.创建生成订单号的目的函数
函数名:get_billlo_num
注:random2 是两位数的随机数,random3 是三位数的随机数
LPAD((SELECT next_billlo_num()), 5, ‘0’)是如果顺序号不够5位,前面用0补全。

CREATE DEFINER=`root`@`localhost` FUNCTION `get_billlo_num`() RETURNS varchar(20) CHARSET utf8
BEGIN
    
DECLARE getval VARCHAR(24); 
DECLARE random2 VARCHAR(2); 
DECLARE random3 VARCHAR(3); 
	SET random2 = (SELECT CEILING(RAND()*90+10));
	SET random3 =(SELECT CEILING(RAND()*900+100));
SET getval = (SELECT CONCAT( 'sj', (DATE_FORMAT(NOW(), '%Y%m%d')), random2, LPAD((SELECT next_billlo_num()), 5, '0') ,random3));
RETURN getval;

END

5.查询序列号

select next_billlo_num();

6.查询生成的订单号

select get_billlo_num();

最终生成的订单号:sj202003096300006112

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值