1、新建表sequence,存放序列规则,方便以后设置多个不同规则编号,包括编号名、编号值、递增值
设计表:
表示例:
其中,name为编号名、value为编号值、next为递增值
2、新建一个事件,定时清空表sequence中的value值
定义:
UPDATE sequence SET value=0 WHERE name='trans_no'
计划,设置每天19点01分清零:
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
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
SELECT get_trans_num();