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