如何生成連續的流水號

2021-04-18 15:54:17 字數 1335 閱讀 3283

工作中常常遇到流水號生成的問題,有的客戶要求流水號必須連續,這個我們的開發工作提出了乙個小難題。

解決方法如下:

方法一:採用最大號表的形式

在資料庫中建立乙個表專門存放其他資料庫的最大流水號,table_maxorderid  ;

在向資料庫中插入資料的時候,首先想table_maxorderid表查詢到當前表的最大號加1,先更新最大號表,然後儲存到業務資料。

優點:效率高

缺點:號碼浪費大一些(例如儲存的時候失敗了,那麼這個號碼就浪費了。)

方法二:採用搶號的形式

這個不需要建立最大號表,在向資料庫中儲存資料的時候,獲取當前表的最大流水號。例如:

select max(id) from tablename ;  讓後將結果加一。

優點:速度快,不浪費號碼;

缺點:併發的時候,號碼重複造成資料無法儲存。

解決辦法:搶號。如果儲存失敗,那麼重複搶號例如:

public synchronized string getorderid(string shengid) 		

// 首先查詢所在地區查詢企業表中有沒有資料

int num = xjqydao.getcountbysql(" and qy_sheng='" + shengid + "'");

string orderid = null;

if (num == 0) else

for (int i = 0; i < 4 - len; i++)

orderid = temp;

} return orderid;

}

for (int i = 0; i < 5; i++)  else if (xjqy.getxian() == null

|| xjqy.getxian().equals("")) else

log.debug("企業編號為:" + code);

xjqy.setcode(code);

xjqydao.create(xjqy);

log.debug("create object");

flag = true;// 儲存成功!

break; // 退出迴圈

} catch (exception e)

}if (!flag)

小結:如果要從嚴格意義上生成連續的流水號,那麼應該採用搶號的方法,同時限制使用者不准刪除記錄,這樣才能保證流水號的嚴格 連續,否則錄入5條,刪掉其中的2條,那麼使用者看到的記錄的號碼將無法連續了。

SQL生成流水號

經過了幾次的測試終於成功了 declare year int,month int,day int,temp no varchar 12 needno varchar 4 no varchar 20 number varchar 50 randno varchar 50 nu varchar 10 s...

php生成流水號

function createn i else if i 100 else if i 1000 else echo substr 2012050010 0,6 echo createn 2 2 echo createn 9 9 echo createn 10 10 echo createn 11 1...

Oracle 生成流水號

輔助表 rul sequence 表中資料如圖 輔助儲存過程 proc getseqence create or replace procedure proc getseqence seqcode in varchar2,returnnum out varchar2,messagecode out ...