经过总结生成流水号主要分为四步骤:
说明:第一需要建一张序列表,第二新建事件每天定时清空序列,第三新建自增函数,第四新建生成序列规则sql函数。
一、第一步新建序列表。
说明:共有四个字段,序列名,当前值,每次自增数量,备注(可有可无)。
说明:这里每次自增为1
二、第二新建事件每天定时清空序列。
说明:这里的事件是用工具建成(mysql navicat ),并不是SQL生成的。
注意:新建事件前需要先开启事务,定时开启在最后总结部分,请先阅读。
UPDATE sequence
SET current_value = 0
WHERE name = 'test_trans_no'
说明:定义开始时间,day 为天,一天执行一次。
三、第三新建自增函数,让序列valu值每次加上增量值。
begin
UPDATE sequence SET current_value=last_insert_id(current_value+increment) WHERE name=seq_name;
RETURN last_insert_id();
end
说明:红色部分是传入的参数,这是个公共的方法。
四、第四新建生成序列规则sql函数。
说明:这里调用了自增函数nextval('test_trans_no')就是上面定义的方法。
BEGIN
DECLARE svalue varchar(32);
SET svalue = (select concat(replace(DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),'-',''),LPAD((SELECT nextval('test_trans_no')), 5, '0')));
RETURN svalue;
END
注意:红色部分是返回定义的参数,容易出现类型错误。
五、总结:
查看当前是否已开启事件计划(调度器)有3种方法:
[sql] view plaincopy在CODE上查看代码片派生到我的代码片
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;
开启事件计划(调度器)开关有4种方法:
[sql] view plaincopy在CODE上查看代码片派生到我的代码片
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
键值1或者ON表示开启;0或者OFF表示关闭;
如果不需要每天从0开始可以直接使用sql解决,select concat('T',replace(DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),'-',''),'001');
说明:有的地方有图片的,发布后看不到了,有问题直接回复。
完结。。