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

看板Soft_Job作者 (再回頭已是百殘身)時間5年前 (2019/05/07 20:42), 5年前編輯推噓56(59381)
留言143則, 90人參與, 5年前最新討論串1/4 (看更多)
是這樣的 最近工作上需要寫一支程式寫資料進資料庫 並產生流水號當key值寫進欄位中 我的想法很單純 就是直接抓資料庫資料筆數 然後拿筆數+1當新增的流水號 寫完後交給SA測試 結果他一測馬上就出問題了 後來我才知道 原來流水號是要抓最大值+1 而不是一直照順序編下去 因為這個我被SA噹的體無完膚 請問這個是很基本的觀念嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.214.145.27 ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1557232923.A.965.html

05/07 20:47, 5年前 , 1F
我覺得是啦
05/07 20:47, 1F

05/07 20:47, 5年前 , 2F
不過以後別再犯就OK了吧,用不著噹
05/07 20:47, 2F

05/07 20:48, 5年前 , 3F
你自己測試測不出來嗎???
05/07 20:48, 3F
我沒想到他會手動刪除資料啊 ※ 編輯: a88241050 (49.214.145.27), 05/07/2019 20:50:06

05/07 20:50, 5年前 , 4F
SA需求不明確還敢噹人喔...
05/07 20:50, 4F

05/07 20:51, 5年前 , 5F
產生流水號規則有說/寫清楚嗎?
05/07 20:51, 5F

05/07 20:51, 5年前 , 6F
... 呃, 這也太新手了
05/07 20:51, 6F

05/07 20:52, 5年前 , 7F
另外第二種作法有考慮multi thread嗎?
05/07 20:52, 7F

05/07 20:53, 5年前 , 8F
還有這不是auto incremental自動會幫你寫嗎,為啥要自己手
05/07 20:53, 8F

05/07 20:53, 5年前 , 9F
動寫?
05/07 20:53, 9F

05/07 20:53, 5年前 , 10F
05/07 20:53, 10F

05/07 20:54, 5年前 , 11F
資料庫一般來說要考慮到刪除的可能
05/07 20:54, 11F

05/07 20:55, 5年前 , 12F
有考慮lock問題嗎? 流水號會重複喔!
05/07 20:55, 12F

05/07 20:56, 5年前 , 13F
要看需求吧
05/07 20:56, 13F

05/07 20:58, 5年前 , 14F
我就算第一次學也不會犯這種錯
05/07 20:58, 14F

05/07 20:59, 5年前 , 15F
是 不過刪除也有分直接刪除或是註記刪除
05/07 20:59, 15F

05/07 21:00, 5年前 , 16F
如果能用資料庫本身的流水號更好 除非流水號有要求格式
05/07 21:00, 16F

05/07 21:02, 5年前 , 17F
一般來說要刪除也要保留資料比較好 畢竟記憶體不貴
05/07 21:02, 17F

05/07 21:05, 5年前 , 18F
查到了 叫soft delete
05/07 21:05, 18F

05/07 21:07, 5年前 , 19F
流水號由DB產生是基本, 除非你有其他特殊需求
05/07 21:07, 19F

05/07 21:11, 5年前 , 20F
是的,這很基本,不抓最大的就會有重複的問題
05/07 21:11, 20F

05/07 21:12, 5年前 , 21F
滿基本的,不過多了一個機會去研究流水號的問題也是好事
05/07 21:12, 21F
請問DB產生的意思是? SA是跟我說抓最大的號碼加1,比如說現在有0000,0001,0002,0003, 0004五筆,這五筆都是由程式產生出來的,所以照理來說程式產生的下一筆就是0005,但 現在問題是SA可能在資料庫直接手動新增資料,比如說現在他手動新增了一筆1234,這時 再跑程式的話就應該要產生1235,而不是0006,他的意思是這樣 ※ 編輯: a88241050 (49.214.145.27), 05/07/2019 21:19:45

05/07 21:14, 5年前 , 22F
抓最大+1也是錯的 除非你一次只insert一筆
05/07 21:14, 22F
是一次一筆沒錯,不會有多筆的情況

05/07 21:21, 5年前 , 23F
google 'sql auto_increment'
05/07 21:21, 23F

05/07 21:23, 5年前 , 24F
比較好奇 SA 為啥會有 max+1 就正確的概念?
05/07 21:23, 24F
※ 編輯: a88241050 (49.214.145.27), 05/07/2019 21:26:17

05/07 21:27, 5年前 , 25F

05/07 21:28, 5年前 , 26F
好奇不用auto increment的原因是?有特殊需求?
05/07 21:28, 26F

05/07 21:29, 5年前 , 27F
保險起見把流水號欄位設成unique
05/07 21:29, 27F

05/07 21:30, 5年前 , 28F
看你資歷 沒事請用sql內建流水號
05/07 21:30, 28F

05/07 21:50, 5年前 , 29F
同時插兩筆抓max也是爆炸
05/07 21:50, 29F

05/07 21:54, 5年前 , 30F
一樣錯啊哈哈 ,別理有些酸推文,誰沒新手過
05/07 21:54, 30F

05/07 21:56, 5年前 , 31F
你們的流水號會不會是設計成文字格式,而且還沒設主鍵?XD
05/07 21:56, 31F

05/07 21:59, 5年前 , 32F
抓最大值+1不就超容易抓到重複 只有第一筆塞得進去
05/07 21:59, 32F

05/07 22:00, 5年前 , 33F
你新手就算了,SA也新手,拜託找個資深的來帶一下吧
05/07 22:00, 33F

05/07 22:06, 5年前 , 34F
05/07 22:06, 34F

05/07 22:07, 5年前 , 35F
那你以後就會想到了,如果你資歷一年內的話啦
05/07 22:07, 35F
還有 68 則推文
還有 1 段內文
05/08 09:38, 5年前 , 104F
你這兩種作法未來table在應用上會很差
05/08 09:38, 104F

05/08 09:40, 5年前 , 105F
多人使用的時候沒咬住key值很容易有重複的問題
05/08 09:40, 105F

05/08 10:18, 5年前 , 106F
我一開始寫也不知道有自動產生的功能 也是跟你一樣XD
05/08 10:18, 106F

05/08 10:45, 5年前 , 107F
設預設值不要用sql寫就好啦
05/08 10:45, 107F

05/08 11:23, 5年前 , 108F
4
05/08 11:23, 108F

05/08 11:25, 5年前 , 109F
叫資料庫自己跑流水號就好 還自己編幹嘛...
05/08 11:25, 109F

05/08 11:34, 5年前 , 110F
是,而且拿 max 也可能會有問題,用資料庫本身提供的自
05/08 11:34, 110F

05/08 11:34, 5年前 , 111F
動增加機制比較好
05/08 11:34, 111F

05/08 12:13, 5年前 , 112F
除非系統只有一個人用,不然抓max+1可能有race condition
05/08 12:13, 112F

05/08 14:08, 5年前 , 113F
...
05/08 14:08, 113F

05/08 14:25, 5年前 , 114F
05/08 14:25, 114F

05/08 15:20, 5年前 , 115F
不嫌麻煩可以建立Sequence,新增時取Sequence用即可
05/08 15:20, 115F

05/08 17:17, 5年前 , 116F
好有創意的方法
05/08 17:17, 116F

05/08 17:24, 5年前 , 117F
其實就算沒講清楚需求。這種可能發生的情況寫code的人
05/08 17:24, 117F

05/08 17:24, 5年前 , 118F
應該都會注意到的.
05/08 17:24, 118F

05/08 17:59, 5年前 , 119F
照常理不太會這樣寫
05/08 17:59, 119F

05/08 18:30, 5年前 , 120F
基本
05/08 18:30, 120F

05/08 19:00, 5年前 , 121F
兩個都4
05/08 19:00, 121F

05/08 22:15, 5年前 , 122F
抓最大+1的話 你之後碰用到多人使用的系統還會再被噹一次
05/08 22:15, 122F

05/09 00:09, 5年前 , 123F
是SA太淺了
05/09 00:09, 123F

05/09 01:32, 5年前 , 124F
這個還蠻基本的耶 取筆數超抖...
05/09 01:32, 124F

05/09 04:44, 5年前 , 125F
你們兩個都錯了啊,搞笑
05/09 04:44, 125F

05/09 12:53, 5年前 , 126F
覺得是想展現優越感
05/09 12:53, 126F

05/09 14:13, 5年前 , 127F
這種事情就是炸過一次就知道了
05/09 14:13, 127F

05/09 14:23, 5年前 , 128F
我都用uuid
05/09 14:23, 128F

05/09 15:54, 5年前 , 129F
這兩個方法都不好吧
05/09 15:54, 129F

05/09 18:04, 5年前 , 130F
是有一點,不過看問題可能會有更好的作法
05/09 18:04, 130F

05/09 20:32, 5年前 , 131F
笑死 看到兩個菜雞戶啄
05/09 20:32, 131F

05/09 22:45, 5年前 , 132F
妳太菜是真的 但是不代表他能夠直接進入db刪資料
05/09 22:45, 132F

05/09 22:45, 5年前 , 133F
假設是用ui刪除的話 那完全就妳問題了
05/09 22:45, 133F

05/10 09:09, 5年前 , 134F
這怎麼會是自己新增 DB不是有自動流水號 column不用
05/10 09:09, 134F

05/10 09:09, 5年前 , 135F
填啊
05/10 09:09, 135F

05/12 07:50, 5年前 , 136F
== 這樣寫怎麼可能沒問題
05/12 07:50, 136F

05/12 10:41, 5年前 , 137F
超低級
05/12 10:41, 137F

05/13 14:25, 5年前 , 138F
不管基本不基本,犯錯要搞懂為何不能這樣做,以及找出最
05/13 14:25, 138F

05/13 14:26, 5年前 , 139F
佳做法,至少下次不要再犯
05/13 14:26, 139F

05/15 08:51, 5年前 , 140F
想必閣下跟我一樣是沒人帶的菜鳥吧,能夠發現問題提早
05/15 08:51, 140F

05/15 08:51, 5年前 , 141F
解決真是件好事。
05/15 08:51, 141F

05/16 10:35, 5年前 , 142F
大家也不用嘲諷吧 每個人也是爆炸中成長QQ
05/16 10:35, 142F

05/16 10:35, 5年前 , 143F
推Tony的心態
05/16 10:35, 143F
文章代碼(AID): #1SqNqRbb (Soft_Job)
文章代碼(AID): #1SqNqRbb (Soft_Job)