※ 本文轉寄自 ptt.cc, 文章原始頁面
看板Soft_Job
標題

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

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

143 則留言

g2581856, 1F
我覺得是啦

g2581856, 2F
不過以後別再犯就OK了吧,用不著噹

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

abccbaandy, 4F
SA需求不明確還敢噹人喔...

abccbaandy, 5F
產生流水號規則有說/寫清楚嗎?

meowyih, 6F
... 呃, 這也太新手了

abccbaandy, 7F
另外第二種作法有考慮multi thread嗎?

meowyih, 8F
還有這不是auto incremental自動會幫你寫嗎,為啥要自己手

meowyih, 9F
動寫?

wayne12345, 10F

sourbait, 11F
資料庫一般來說要考慮到刪除的可能

weinine32, 12F
有考慮lock問題嗎? 流水號會重複喔!

MOONY135, 13F
要看需求吧

alihue, 14F
我就算第一次學也不會犯這種錯

yyc1217, 15F
是 不過刪除也有分直接刪除或是註記刪除

yyc1217, 16F
如果能用資料庫本身的流水號更好 除非流水號有要求格式

yyc1217, 17F
一般來說要刪除也要保留資料比較好 畢竟記憶體不貴

yyc1217, 18F
查到了 叫soft delete

alan3100, 19F
流水號由DB產生是基本, 除非你有其他特殊需求

supernow, 20F
是的,這很基本,不抓最大的就會有重複的問題

t64141, 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

alan3100, 22F
抓最大+1也是錯的 除非你一次只insert一筆
是一次一筆沒錯,不會有多筆的情況

meowyih, 23F
google 'sql auto_increment'

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

Chris926926, 26F
好奇不用auto increment的原因是?有特殊需求?

googoo1102, 27F
保險起見把流水號欄位設成unique

godddddd, 28F
看你資歷 沒事請用sql內建流水號

x000032001, 29F
同時插兩筆抓max也是爆炸

q26766, 30F
一樣錯啊哈哈 ,別理有些酸推文,誰沒新手過

mackliu, 31F
你們的流水號會不會是設計成文字格式,而且還沒設主鍵?XD

GoodFriday, 32F
抓最大值+1不就超容易抓到重複 只有第一筆塞得進去

ripple0129, 33F
你新手就算了,SA也新手,拜託找個資深的來帶一下吧

LinuxKernel, 34F

jyunwei, 35F
那你以後就會想到了,如果你資歷一年內的話啦

crossdunk, 36F
很基本阿,可是為什麼是SA測試呀

ChungLi5566, 37F
非本科? 實務上流水號都給db自己編啊

crossdunk, 38F
他的流水號應該是前面還需要加其他東西

abraxas, 39F
他那做法,直接新增一筆溢位筆數減一的資料不就炸掉了

owen5566, 139F
== 這樣寫怎麼可能沒問題

rickboo0809, 140F
超低級

Tony427, 141F
不管基本不基本,犯錯要搞懂為何不能這樣做,以及找出最

Tony427, 142F
佳做法,至少下次不要再犯

newhandfun, 143F
想必閣下跟我一樣是沒人帶的菜鳥吧,能夠發現問題提早

newhandfun, 144F
解決真是件好事。

silent5566, 145F
大家也不用嘲諷吧 每個人也是爆炸中成長QQ

silent5566, 146F
推Tony的心態

a88241050 作者的近期文章

[請益] 要求第三方改API會很奇怪嗎?
最近在串接第三方遊戲的API 基本上主要流程就是玩家玩遊戲時第三方會打請求到我們server 之前接過幾家都沒問題 但這次接的這家發現他們打請求過來時沒有帶到我需要的參數 詢問他們後他們是說他們有提供API 要我打他們的API取得那些數值
更多 a88241050 作者的文章...