利用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