mysql 生成流水号每天更新从0开始

经过总结生成流水号主要分为四步骤:

说明:第一需要建一张序列表,第二新建事件每天定时清空序列,第三新建自增函数,第四新建生成序列规则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');


说明:有的地方有图片的,发布后看不到了,有问题直接回复。

完结。。



你可能感兴趣的:(数据库开发)