Mysql实现自增长编号,日期+序列,序列定时归零

1、新建表sequence,存放序列规则,方便以后设置多个不同规则编号,包括编号名、编号值、递增值
设计表:







表示例:

其中,name为编号名、value为编号值、next为递增值

2、新建一个事件,定时清空表sequence中的value值
定义:
UPDATE sequence SET value=0 WHERE name='trans_no'
计划,设置每天19点01分清零:
Mysql实现自增长编号,日期+序列,序列定时归零_第1张图片
3、新建一个函数next_trans_num(),每次递增获取sequence中value值
定义,其中 last_insert_id()函数为mysql自带函数,获取该表中最后更新的值,seq_name为函数参数,确定调用哪个生成规则
begin
 UPDATE sequence SET value=last_insert_id(value+next) WHERE name=seq_name;
 RETURN last_insert_id();
end
Mysql实现自增长编号,日期+序列,序列定时归零_第2张图片
3、再新建一个函数get_trans_num(),获取日期+指定长度序列的编号
定义, DECLARE getval VARCHAR(24),申明变量getval,SET getval =(),将结果赋值给getval:
BEGIN
 DECLARE getval VARCHAR(24);
 SET getval = (SELECT CONCAT(DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),  LPAD((SELECT next_trans_num('trans_no')), 10, '0')));
RETURN getval;
END
Mysql实现自增长编号,日期+序列,序列定时归零_第3张图片
4、在sql查询中运行函数 get_trans_num(),即可得到逾期的编号:
SELECT get_trans_num();

5、向表中插入该编号:
Mysql实现自增长编号,日期+序列,序列定时归零_第4张图片













你可能感兴趣的:(mysql)