Re: [請益] 這是個很低級的錯誤嗎?

作者: Label (Panel)   2019-05-08 01:28:01
※ 引述《a88241050 (再回頭已是百殘身)》之銘言:
: 是這樣的
: 最近工作上需要寫一支程式寫資料進資料庫
: 並產生流水號當key值寫進欄位中
: 我的想法很單純
: 就是直接抓資料庫資料筆數
: 然後拿筆數+1當新增的流水號
: 寫完後交給SA測試
: 結果他一測馬上就出問題了
: 後來我才知道 原來流水號是要抓最大值+1
: 而不是一直照順序編下去
: 因為這個我被SA噹的體無完膚
: 請問這個是很基本的觀念嗎?
auto increment 遇到以下情境會有跳號等問題
1. 同table多種序號應用
2. 不預期的增刪
3. 定期重置,例如每個月要重新由1開始滾動
有一種方式是將流水號另存一專存序號的table
由專門的取號程式來存取
例如
作者: ashlikewing   2019-05-08 02:03:00
我會推薦用 function ROW_NUMBER()
作者: cuttleufish (熱帶魚)   2019-05-08 08:28:00
作者: xdraculax (首席怪叔叔)   2019-05-08 08:57:00
觸發器
作者: sextitanic   2019-05-08 09:57:00
或是 transaction + for update
作者: MOONY135 (談無慾)   2019-05-08 10:06:00
我覺得這種討論 可以有必須有
作者: bill0205 (善良的小孩沒人愛)   2019-05-08 10:07:00
之前有個前輩使用適用insert某張表 然後取得insert id當作流水序號 不知道這樣做法如何
作者: MephistoH (默非斯托)   2019-05-08 10:23:00
sqlserver有內建的方法,欄位可以設定識別key想要手動控制,是有很多方式,只是要規範清楚
作者: ChungLi5566 (中壢56哥)   2019-05-08 18:39:00
以稽核角度來看 設auto increment還發生跳號代表有人動過資料表
作者: jack0204 (Jarbar王朝)   2019-05-08 21:33:00
transaction失敗也會跳號吧
作者: lwtech   2019-05-08 21:50:00
作者: aszx4510 (wind)   2019-05-08 22:50:00
優質討論
作者: MangoTW (不在線上)   2019-05-09 09:56:00
SQL 取號又不保證插入成功 正常情況也會跳號
作者: pttrAin (rAin)   2019-05-10 20:56:00
推推
作者: iven00000000 (Iven CJ7)   2019-05-15 04:23:00
之前我也是用插入取得key

Links booklink

Contact Us: admin [ a t ] ucptt.com