Re: [請益] 這是個很低級的錯誤嗎?
※ 引述《a88241050 (再回頭已是百殘身)》之銘言:
: 是這樣的
: 最近工作上需要寫一支程式寫資料進資料庫
: 並產生流水號當key值寫進欄位中
: 我的想法很單純
: 就是直接抓資料庫資料筆數
: 然後拿筆數+1當新增的流水號
: 寫完後交給SA測試
: 結果他一測馬上就出問題了
: 後來我才知道 原來流水號是要抓最大值+1
: 而不是一直照順序編下去
: 因為這個我被SA噹的體無完膚
: 請問這個是很基本的觀念嗎?
auto increment 遇到以下情境會有跳號等問題
1. 同table多種序號應用
2. 不預期的增刪
3. 定期重置,例如每個月要重新由1開始滾動
有一種方式是將流水號另存一專存序號的table
由專門的取號程式來存取
例如
-- 取得目前 序號
Select order_seq from seq_numbers;
-- 例如目前為102
-- 嘗試更新序號 若更新筆數 = 1 則呼叫結果回傳為真
-- effected rows為0 便是被其他process先取號,需重試
update seq_numbers set order_seq = order_seq + 1
where order_seq = 102;
缺點是存取db的頻繁,增加伺服器端的負擔
因此也有把流水號存在 NOSql 如redis mongodb 等載體
以push pop來配發或者讓各process來領取
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.150.145.60
※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1557250084.A.086.html
推
05/08 02:03,
5年前
, 1F
05/08 02:03, 1F
推
05/08 08:28,
5年前
, 2F
05/08 08:28, 2F
→
05/08 08:57,
5年前
, 3F
05/08 08:57, 3F
→
05/08 09:57,
5年前
, 4F
05/08 09:57, 4F
→
05/08 10:06,
5年前
, 5F
05/08 10:06, 5F
→
05/08 10:06,
5年前
, 6F
05/08 10:06, 6F
推
05/08 10:07,
5年前
, 7F
05/08 10:07, 7F
→
05/08 10:07,
5年前
, 8F
05/08 10:07, 8F
推
05/08 10:23,
5年前
, 9F
05/08 10:23, 9F
→
05/08 10:24,
5年前
, 10F
05/08 10:24, 10F
→
05/08 18:39,
5年前
, 11F
05/08 18:39, 11F
→
05/08 18:40,
5年前
, 12F
05/08 18:40, 12F
推
05/08 21:33,
5年前
, 13F
05/08 21:33, 13F
→
05/08 21:50,
5年前
, 14F
05/08 21:50, 14F
推
05/08 22:50,
5年前
, 15F
05/08 22:50, 15F
推
05/09 09:56,
5年前
, 16F
05/09 09:56, 16F
推
05/10 20:56,
5年前
, 17F
05/10 20:56, 17F
推
05/15 04:23,
5年前
, 18F
05/15 04:23, 18F
討論串 (同標題文章)