iT邦幫忙

0

想請問訂單編號存到資料庫問題

想請問訂單編號存到資料庫(mysql)問題

訂單編號規則改為:

AB10312300000005

2碼公司縮寫+3碼年份2碼月份+7碼訂單流水號(每月歸零一次)

會不會同時有二個客人按送出訂單時 , 會記錄同一個訂單編號 , 這個要何如避免 , 資料庫(mysql)的欄位有必要設定唯一值(primary key 還是 unique)嗎?還是有更好的做法呢?謝謝大家抽空解答.

4
kerryking
iT邦新手 5 級 ‧ 2014-12-30 14:08:56

我個人開發的習慣是會建primary key,可以避免重覆的問題
如果你的訂單單號是多個欄位的話,就看要不要建Composite Key
在新增的時候還會再加where去判斷該訂單單號是否有使用
有時候直接對DB新增、修改時就有可能會有重覆了汗

以上,給你參考

0
shengfu
iT邦新手 2 級 ‧ 2014-12-31 08:25:15

如果是將最大號碼記錄在Table裡面,一定會有號碼重複的問題
因為在update max_number+1的時候,可能又有別張單子取號了
以前我們公司就有這樣的問題

分享一些小心得,希望能幫點小忙

1.訂單號碼不像發票,一定要續時續號,建議可以直接採用sequence的設定去
取流水號,這樣不會有號碼重複問題,但是程式若沒寫好,會有跳號問題.
(sequence也可以reset初始號)

2.維持現行做法,但是在table的回寫,可以採用wait for update的管控
http://www.techonthenet.com/oracle/cursors/for\_update.php
select_statement
FOR UPDATE [OF column_list] [NOWAIT];

再取號前可以先做些DML動作的卡控.

我個人傾向採用sequence的建立.如果有更好的方法,再請分享喔~ ^^

0
pantc328
iT邦研究生 1 級 ‧ 2014-12-31 11:27:44

不可能~
訂單編號由系統產生
現在的電腦隨便都有每秒處理上百筆的能力

人Key單的速度不會比電腦快

所以不可能二個人以上同時處理的問題
最少有MS的時間差

summertw iT邦好手 1 級 ‧ 2015-01-04 19:39:46 檢舉

pantc328提到:
不可能~
訂單編號由系統產生
現在的電腦隨便都有每秒處理上百筆的能力

人Key單的速度不會比電腦快

所以不可能二個人以上同時處理的問題
最少有MS的時間差

哈哈哈哈哈...........

2
hanigogo
iT邦新手 3 級 ‧ 2015-01-02 16:55:21

通常遇到訂單編號重碼的問題,都會在取號的時候做lock的動作,並記錄現在取到幾號,
取號完畢再解鎖,這樣就不會重碼了,參考看看

我要發表回答

立即登入回答