mysql 函数怎样创建_Mysql的函数创建

业务需求:需产生一个连续的单号,例如YH2019012400001,YH2019012400002;第二天又重新从1生成连续的单号

mysql版本:5.5+

JDK 1.8+

mybatis 3.4+

一,写这个函数的好处

1.从java代码逻辑上操作的话,并发量大的话,很难保证出现连续的,而且代码逻辑也会变得复杂,不好维护

2.从数据库方向下手的话,不用我们手动管理,减轻压力;事务不提交就不会生成,保证了连续性和稳定性

二,代码分析

5156812ad849e5793cdd26c538938a78.png

-- 创建一个无参的函数

create function createSalesOrderReturnNo()

-- 设置函数的返回值

returns varchar(32)

BEGIN -- 函数头

-- 声明参数

DECLARE salesOrderReturnNo VARCHAR(32);

DECLARE dateData VARCHAR(6);

DECLARE runningNum VARCHAR(5);

DECLARE maxNum VARCHAR(5);

-- 获取当日最大数量

SET maxNum = SELECT COUNT(*)+1 FROM erp_sales_order_return s WHERE DATE_FORMAT(s.createTime,'%Y%m%d') = DATE_FORMAT(NOW(),'%Y%m%d');

-- 获取当前日期格式,并格式化

SET dateData = DATE_FORMAT(NOW(),'%Y%m%d');

-- 获取流水号,先拼接,后截取

SET runningNum = select RIGHT((SELECT CONCAT('00000',maxNum)),5);

-- 拼接返回单号,注意前后顺序

SET salesOrderReturnNo = CONCAT(dateData,runningNum);

-- 返回单号

return salesOrderReturnNo;

END;

不过执行的时候可能会遇到这样的一个错误(就是执行语言有 @ % 符号时执行权限不够);截图放不上。。。

解决可以去搜索执行语句,然后执行,成功之后在重启数据库;

结语:任何问题先从业务下手,业务无法解决在从技术解决,如果都不行,就想个折中的方法,各让一步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值