很多时候在实际开发中,流水号往往不是123自增这么简单,特定字母加生成日期加几位数的序列号是普遍现象。本博客主要是通过函数和触发器结合生成自定义流水号并实现日期的更新。
前置条件:耐性80%;mysql5.7;Navicat for Mysql;了解mysql的函数及触发器语法
先建一个存储流水号格式的表LSH
编写流水号生成及日期更新getLSH()函数
BEGIN
DECLARE str VARCHAR(20) DEFAULT '';
SET @LSHName=name;
SET @LSHHEAD=(select head from LSH where head=@LSHName);
SET @LSHDATE=(select date from LSH where head=@LSHName);
SET @NOW=(select DATE_FORMAT(SYSDATE(),"%Y%m%d") from dual);
if @LSHDATE<>@NOW THEN
SET @LSHDATE=@NOW;
update LSH set date=@LSHDATE;
UPDATE LSH set number='1000';
ELSE
SET @LSHDATE=(select date from LSH where head=@LSHName);
END IF;
update LSH set number=number+1 where head=@LSHName;
SET @LSHNUM=(select number from LSH where head=@LSHName);
SET str=CONCAT(@LSHHEAD,@LSHDATE,@LSHNUM);
return str;
END
编写触发器
create trigger getloginlsh
before insert on login
begin
set new.loginid=getLSH('LG');
end
或者
结尾
getLSH(“参数”)的参数要在LSH表中添加,插入的时候函数会比较每天的日期和LSH表的date字段,不一样则将所有date字段改为当天日期,并将所有number字段初始化为1000。聪明的盆友可能会想到,可以将其他表要初始化的东西放到这个函数里以前初始化,怎么实现呢,下回分解~~