因為最近做專案需要,需要使用到,自定義的不重複的自增長的訂單號,在網上找了資料然後又加入了自己的修改,做成的mysql生成訂單號的儲存過程。
drop procedure pp;
create procedure proc_get_no (tname varchar(50),cname varchar(50),prefix varchar(20))
begin
#最終生成的訂單號
declare order_sn varchar(20);
#當前系統中的訂單號
declare prev varchar(15);
#舊的日期
declare prevdatetime varchar(15);
#擷取到的編號
declare sn bigint(15);
#當前的系統時間
declare nowdate varchar(15);
# 獲得當天的最後一條記錄編號 判斷資料庫中的建立日期是否大於當前日期 也就等於是是否是當天的單據
set @pre = prefix;
set @na=tname;
set @cna = cname;
set @sql_text:='select max(';
set @sql_text := concat(@sql_text,@cna,') into @recordcount from ');
set @whe :=' where create_date > current_date()';
set @sql_text:=concat(@sql_text,@na,@whe);
prepare stmt from @sql_text;
execute stmt;
set prev = @recordcount;
#擷取日期
select substr(prev from 2 for 9) into prevdatetime;
#擷取編號
select right(prev,5) into sn;
#獲得當前的時間 使用now()函式 獲得的格式是2014-05-28 11:20:18 然後在獲取自己想要的資料
select date_format(now(),'%y%m%d') into nowdate;
#判斷最後一條記錄是否為空
if isnull(prev) then
select concat(@pre,nowdate,'00001') into order_sn;
#return order_sn;
elseif nowdate = prevdatetime then
select concat(@pre,nowdate,'00001') into order_sn;
#return order_sn;
else
select concat(@pre,prevdatetime,lpad((sn+1),4,'0'))into order_sn;
#return order_sn;
end if;
select order_sn;
end;
call pp('quotation','quotation_no','o')
訂單號自增長部分實現 工作筆記
很多場景需要用到訂單號,訂單號可能會有很多元素組成,比如 特定字元 時間 自增長。其中大多情況下必不可少的是自增長部分。現提供利用redis來實現自增長的幾種方式 每天重置的自增長 獲取訂單號自增長部分,每天重置 param key 主鍵 param model 格式模板,例如五位數 00000 p...
mysql 訂單號主鍵 為什麼不用訂單號當做主鍵?
1.普通索引上儲存的值是主鍵的值,如果主鍵是乙個很長的字串並且建了很多普通索引,將造成普通索引占有很大的物理空間 2.自增id 在插入的時候可以保證相鄰的兩條記錄可能在同乙個資料塊,而訂單號的連續性在設計上可能沒有自增id好,導致連續插入可能在多個資料塊,增加了磁碟讀寫次數。innodb儲存引擎邏輯...
訂單號生成
之前用uuid 因為太長改用16位因此在網上找到一下這種做法,年月日擷取 時間戳 在加隨機數 生成乙個訂單 獲取年份 var date j f c d e b h i a date gettime tostring var ordersn date new date getfullyear 2015...