這篇博文發布後,有朋友問有沒有sql server版本的,現在有了==》傳送門
在乙個erp進銷存系統或0a等其他系統中,如果多人同時進行生成訂單號的操作的話,容易出現多人獲得同乙個訂單號的情況,對公司業務造成不可挽回的損失
我們可以利用儲存過程和資料表搭配,建立一張表和建立儲存過程,儲存過程負責生成訂單號,表負責處理唯一性問題
當儲存過程生成乙個訂單編號,首先先把訂單號寫進表中,再把訂單號結果顯示出來,把生成的訂單號寫進表裡會出現兩種情況,為什麼呢?因為我們的表設定了主鍵(主鍵唯一性)
下面將用**和實際操作講解下生成唯一訂單號的過程
生成訂單編號格式為:自定義字首+年月日+字尾(001、002、003)
1.首先建立乙個儲存過程
輸入為bill_type(字首),輸出為bill_nop(訂單編號)
create definer = current_user procedure `getbillno`(in bill_type varchar(3), out bill_nop varchar(25))
begin
2.生成年月日和字尾
年月日為當前系統時間,字尾初始值為0
declare currentdate varchar (15);
declare lastno int default 0;
select date_format(now(), '%y%m%d') into currentdate;
3.查詢**,獲取**的訂單編號
查詢**,獲取字首與自定義內容相關的最新乙個訂單編號
select ifnull(bill_no, 'notnull') into bill_nop
from temp_bill
where substring(bill_no,1,3) =bill_type and
substring(bill_no,4,8) =currentdate
order by bill_no desc limit 1;
4.生成訂單編號
如果上一步獲取的訂單編號不為空,新生成的訂單號在原訂單號上+1
例:獲取的訂單號:uie20200611015
即生成的訂單號為:uie20200611016
如果上一步www.cppcns.com獲取的訂單號為空,新生成的訂單號字尾為001
例:生成的訂單號:uie20200611001
if bill_nop !='' then
set lastno = convert(substring(bill_nop, -3), decimal) ;
select
concat(bill_type,currentdate,lpad((lastno + 1),3, '0')) into bill_nop ;
else
select
concat(bill_type,currentdate,lpad((lastno + 1),3, '0')) into bill_nop ;
end if;
5.將生成的訂單號插入表中
如果表中存在相同訂單號則插入表失敗
如果表中不存在相同訂單號則插入表成功
insert into temp_bill (bill_no, bill_type) values (bill_nop,bill_type) ;
6.返回唯一訂單編號
當訂單插入表成功,即可返回唯一的訂單編號(如果上一步不成功,即不會執行這一步)
select bill_nop;
1.首先我的表裡沒有資料,會生成字首(我輸入的:uie)+年月日(
20200611)+001(第乙個資料,所以是001)
即:uie20200611001
2當我第二次輸入時,由於程式設計客棧表裡有資料了,會根據最新的訂單編號字尾加1
即:uie20200611002
乙個卑微菜雞的自述:
希望這邊文章可以幫到大家
積分充足的就直接**吧,沒有積分的對著圖敲,反正**量也不大
如果你是學生,沒有積分,可以私聊我,免費給你發原始碼
****鏈結:mysql_getbillno.sql
**截圖:
高並發生成唯一訂單號
最近開發一套會員系統,涉及到訂單號生成,在高並發條前提下,如何生成唯一的訂單號值得斟酌,我這裡提供一種較為可行的方案 public static string getorderidbyuuid 0 代表前面補充0 4 代表長度為4 d 代表引數為正數型 return time string.form...
SQL server高並發生成唯一訂單號的方法實現
前幾天寫了一篇mysql高並發生成唯一訂單號的方法,有人私信問有沒有sql server版本的,今天中午特地寫了sql server版本的高並發生成唯一訂單號實現,其實mysql和sql server原理都一樣,主要是他們部分語法有些區別,所以你會發現我這篇文章文字說明幾乎一樣,只有 和介面不一樣。...
PHP生成唯一訂單號
order number date ymd substr implode null,array map ord str split substr uniqid 7,13 1 0,8 簡單從內到外解析一下這個訂單號生成過程 1 date ymd 這個很容易理解,是在最前方拼接乙個當前年月日組成的數字。...