mysql 建立自增長訂單號

2021-09-02 04:34:21 字數 1612 閱讀 5401

因為最近做專案需要,需要使用到,自定義的不重複的自增長的訂單號,在網上找了資料然後又加入了自己的修改,做成的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...