Mysql的函数创建


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

mysql版本:5.5+

JDK 1.8+

mybatis 3.4+

一,写这个函数的好处

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

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

二,代码分析 

-- 创建一个无参的函数
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;

 

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

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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM