Soft_Job 板


LINE

是这样的 最近工作上需要写一支程式写资料进资料库 并产生流水号当key值写进栏位中 我的想法很单纯 就是直接抓资料库资料笔数 然後拿笔数+1当新增的流水号 写完後交给SA测试 结果他一测马上就出问题了 後来我才知道 原来流水号是要抓最大值+1 而不是一直照顺序编下去 因为这个我被SA当的体无完肤 请问这个是很基本的观念吗? --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.214.145.27
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1557232923.A.965.html
1F:推 g2581856: 我觉得是啦05/07 20:47
2F:→ g2581856: 不过以後别再犯就OK了吧,用不着当05/07 20:47
3F:→ diabloevagto: 你自己测试测不出来吗???05/07 20:48
我没想到他会手动删除资料啊 ※ 编辑: a88241050 (49.214.145.27), 05/07/2019 20:50:06
4F:推 abccbaandy: SA需求不明确还敢当人喔...05/07 20:50
5F:→ abccbaandy: 产生流水号规则有说/写清楚吗?05/07 20:51
6F:→ meowyih: ... 呃, 这也太新手了05/07 20:51
7F:→ abccbaandy: 另外第二种作法有考虑multi thread吗?05/07 20:52
8F:→ meowyih: 还有这不是auto incremental自动会帮你写吗,为啥要自己手05/07 20:53
9F:→ meowyih: 动写?05/07 20:53
10F:推 wayne12345: 是05/07 20:53
11F:推 sourbait: 资料库一般来说要考虑到删除的可能05/07 20:54
12F:→ weinine32: 有考虑lock问题吗? 流水号会重复喔!05/07 20:55
13F:→ MOONY135: 要看需求吧05/07 20:56
14F:推 alihue: 我就算第一次学也不会犯这种错05/07 20:58
15F:推 yyc1217: 是 不过删除也有分直接删除或是注记删除05/07 20:59
16F:→ yyc1217: 如果能用资料库本身的流水号更好 除非流水号有要求格式05/07 21:00
17F:→ yyc1217: 一般来说要删除也要保留资料比较好 毕竟记忆体不贵05/07 21:02
18F:→ yyc1217: 查到了 叫soft delete05/07 21:05
19F:→ alan3100: 流水号由DB产生是基本, 除非你有其他特殊需求05/07 21:07
20F:→ supernow: 是的,这很基本,不抓最大的就会有重复的问题 05/07 21:11
21F:推 t64141: 满基本的,不过多了一个机会去研究流水号的问题也是好事 05/07 21:12
请问DB产生的意思是? SA是跟我说抓最大的号码加1,比如说现在有0000,0001,0002,0003, 0004五笔,这五笔都是由程式产生出来的,所以照理来说程式产生的下一笔就是0005,但 现在问题是SA可能在资料库直接手动新增资料,比如说现在他手动新增了一笔1234,这时 再跑程式的话就应该要产生1235,而不是0006,他的意思是这样 ※ 编辑: a88241050 (49.214.145.27), 05/07/2019 21:19:45
22F:→ alan3100: 抓最大+1也是错的 除非你一次只insert一笔 05/07 21:14
是一次一笔没错,不会有多笔的情况
23F:→ meowyih: google 'sql auto_increment' 05/07 21:21
24F:推 benjamin99: 比较好奇 SA 为啥会有 max+1 就正确的概念? 05/07 21:23
※ 编辑: a88241050 (49.214.145.27), 05/07/2019 21:26:17
26F:→ Chris926926: 好奇不用auto increment的原因是?有特殊需求? 05/07 21:28
27F:推 googoo1102: 保险起见把流水号栏位设成unique 05/07 21:29
28F:→ godddddd: 看你资历 没事请用sql内建流水号 05/07 21:30
29F:推 x000032001: 同时插两笔抓max也是爆炸 05/07 21:50
30F:推 q26766: 一样错啊哈哈 ,别理有些酸推文,谁没新手过 05/07 21:54
31F:→ mackliu: 你们的流水号会不会是设计成文字格式,而且还没设主键?XD 05/07 21:56
32F:→ GoodFriday: 抓最大值+1不就超容易抓到重复 只有第一笔塞得进去 05/07 21:59
33F:推 ripple0129: 你新手就算了,SA也新手,拜托找个资深的来带一下吧 05/07 22:00
34F:→ LinuxKernel: 惨 05/07 22:06
35F:→ jyunwei: 那你以後就会想到了,如果你资历一年内的话啦 05/07 22:07
36F:推 crossdunk: 很基本阿,可是为什麽是SA测试呀 05/07 22:13
37F:→ ChungLi5566: 非本科? 实务上流水号都给db自己编啊 05/07 22:14
38F:推 crossdunk: 他的流水号应该是前面还需要加其他东西 05/07 22:15
39F:推 abraxas: 他那做法,直接新增一笔溢位笔数减一的资料不就炸掉了 05/07 22:15
40F:推 Label: 他还没测transation呢05/07 22:16
41F:推 kurtsgm: 405/07 22:19
42F:→ ChungLi5566: DB2 https://i.imgur.com/fJG1QA6.jpg 05/07 22:20
43F:推 bill0205: 通常db 的 key都是auto increment吧= =05/07 22:23
44F:推 abccbaandy: 好奇到底什麽使用情境可以想出这种神奇作法... 05/07 22:24
45F:→ bill0205: 我自己是会做两种序号 一种是db 一种是显示的SN 05/07 22:24
可是我的序号前面还要加其他字串欸,等於说我在写入资料库前就要取得db产生的key值 组成我要的流水号後再写入db,这有办法吗? ※ 编辑: a88241050 (49.214.145.27), 05/07/2019 22:33:10
46F:推 rahit: 这东西一般资料库都能自动给… 05/07 22:31
47F:推 cloudgoogle: 单纯抓max一样也是有问题 多人同时操作的执行顺序... 05/07 22:35
48F:推 drajan: 蛮严重的错误 不过如果入行不到半年可以容忍 05/07 22:38
49F:→ ChungLi5566: 要加字串还是补左边零的写在程式就好 干嘛放在table 05/07 22:42
50F:→ ChungLi5566: 占DB磁碟空间 05/07 22:42
51F:→ bill0205: 有序的就照C大方法 或是把字串丢到另外栏位 捞出来时後 05/07 22:43
52F:→ bill0205: 再组起来 无序比较麻烦 05/07 22:43
53F:推 ashlikewing: 流水号自己做太扯了啦 05/07 22:44
54F:推 cloudgoogle: 如果可以捞出来另外处理当然是最好 不过有的Table 05/07 22:46
55F:→ cloudgoogle: 是要给别人存取的,可能就没办法控制在自己这边 05/07 22:46
56F:→ cloudgoogle: 即便如此,还是可以像bill大说的存两栏可能好一点 05/07 22:47
57F:推 onlyeric23: 菜到不行 05/07 22:49
58F:→ you878787: 如果我看到这种code应该会把这个人干到火星去吧= = 05/07 22:51
59F:→ ChungLi5566: 通常别系统来存取 是走API而不会直连DB 05/07 22:51
60F:→ bill0205: 题外话 大家是怎麽做无序的流水序号 05/07 22:52
61F:推 you878787: 开始写前请先订好test case, 另外有基础知识应该根本 05/07 22:55
62F:→ you878787: 不能这样抓.... 05/07 22:55
63F:→ lukelove: 比较大的问题是 开发前没有先查怎麽设计就土炮做 05/07 22:56
64F:推 jinmin88: 菜到不行的问题 05/07 23:10
65F:推 blackie1019: 两个都会笑到翻过去 05/07 23:39
66F:推 crossdunk: 无序怎麽叫做流水XD 05/07 23:57
67F:→ Darkword1987: 资料笔数减少不就GG了 05/07 23:58
68F:推 CloudyWing: 总笔数+1在跳号的情况下有可能序号重复,有经验的设计 05/08 00:01
69F:→ CloudyWing: 应该就要注意这件事... 05/08 00:02
70F:→ CloudyWing: 今天就算是Soft delete,也有可能因为一些意外因素导 05/08 00:05
71F:推 jlhc: 还是不懂为什麽不是auto increment 05/08 00:06
72F:→ CloudyWing: 致资料跳号,不过我好奇设计上有介面可以输入序号 05/08 00:07
73F:→ CloudyWing: 还是SA直接加资料库? 05/08 00:07
74F:推 bibo9901: uuid.. 05/08 00:09
75F:推 molopo: 流水号一直上去就好 05/08 00:12
76F:→ gpctv: 这个也要刁,改就好了啊,在我们公司SA地位像狗一样 05/08 00:27
77F:→ sachung28: serial primary key就会自己产生序号+避免重复了 05/08 00:28
78F:→ viper9709: 流水号不用也不能自己做吧... 05/08 00:28
79F:→ sachung28: 可以在SQL写入DB时顺便用return回传+改格式 前提是DB 05/08 00:33
80F:→ sachung28: 有支援...另外 删除并重塞资料测序号产生逻辑ok 但我 05/08 00:33
81F:→ sachung28: 第一次看到QA自己塞数字当流水号 05/08 00:33
82F:→ sachung28: 如果是UI呈现美观 流水号要补字串 这可以API hard code 05/08 00:36
83F:→ sachung28: 处理 或是另外开个流水号前缀字的定义表储存 查询时将 05/08 00:36
84F:→ sachung28: 前缀和序号串起来 05/08 00:36
85F:→ sachung28: 建议你去恶补一下DB观念 学会用DB能省很多写程式的时 05/08 00:40
86F:→ sachung28: 间 05/08 00:40
87F:推 bitcch: https://stackoverflow.com/q/5940931 05/08 01:36
88F:推 mathrew: 4 这种问题就代表 你根本写的时候 很多状况都没想过 05/08 06:23
89F:推 mathrew: 但是为什麽流水号不给DB自动去编 05/08 06:26
90F:推 brianhsu: 流水号不要自己生,问题很多的。交给 DB,例如 auto Inc 05/08 07:26
91F:→ brianhsu: 之类的功能处理。 05/08 07:26
92F:嘘 deray: 流水号干嘛最大值+1 auto increment 05/08 08:36
93F:→ qpowjohn: 抓最大值+1想了一下应该有可能,可是要开transaction保 05/08 08:44
94F:→ qpowjohn: 证不会有人写表...有错请指教 05/08 08:44
95F:→ xdraculax: 总数加一很瞎,最大加一也只是50步笑百步 05/08 08:51
96F:→ y3k: 这就是菜而已吧 05/08 08:57
97F:→ luluking: 你不觉得这样写反而麻烦 05/08 09:03
98F:→ lion0208: 为何不用 auto increment?另外取最大+1,同时间确定只 05/08 09:10
99F:→ lion0208: 会有一个 process/thread 在写? 05/08 09:10
100F:推 mago: 如果有大量同时写入问题,两个都不行 05/08 09:14
101F:→ CodingMan: 换个想法你就知道答案了 难不成这是高级问题吗? 05/08 09:19
102F:→ lazarus1121: auto increment如果需要跨table当key不就不能用了 05/08 09:20
103F:推 silent5566: 直接用DB的sequence去滚不就好了 05/08 09:34
104F:→ silent5566: 你这两种作法未来table在应用上会很差 05/08 09:38
105F:→ silent5566: 多人使用的时候没咬住key值很容易有重复的问题 05/08 09:40
106F:→ hakama99: 我一开始写也不知道有自动产生的功能 也是跟你一样XD 05/08 10:18
107F:→ testPtt: 设预设值不要用sql写就好啦 05/08 10:45
108F:→ johnny9144: 4 05/08 11:23
109F:推 f124: 叫资料库自己跑流水号就好 还自己编干嘛... 05/08 11:25
110F:推 iamshiao: 是,而且拿 max 也可能会有问题,用资料库本身提供的自 05/08 11:34
111F:→ iamshiao: 动增加机制比较好 05/08 11:34
112F:推 seedli: 除非系统只有一个人用,不然抓max+1可能有race condition 05/08 12:13
113F:→ worf: ... 05/08 14:08
114F:推 amyt: 是 05/08 14:25
115F:推 laker780304: 不嫌麻烦可以建立Sequence,新增时取Sequence用即可 05/08 15:20
116F:推 zg0608x: 好有创意的方法 05/08 17:17
117F:推 indexcome: 其实就算没讲清楚需求。这种可能发生的情况写code的人 05/08 17:24
118F:→ indexcome: 应该都会注意到的. 05/08 17:24
119F:推 BignoZe: 照常理不太会这样写 05/08 17:59
120F:→ rocwild: 基本 05/08 18:30
121F:→ GinginDenSha: 两个都4 05/08 19:00
122F:推 xo1100: 抓最大+1的话 你之後碰用到多人使用的系统还会再被当一次 05/08 22:15
123F:推 stupid0319: 是SA太浅了 05/09 00:09
124F:推 hooll111: 这个还蛮基本的耶 取笔数超抖... 05/09 01:32
125F:→ deanh: 你们两个都错了啊,搞笑 05/09 04:44
126F:→ gettheworld: 觉得是想展现优越感 05/09 12:53
127F:推 zerrofighter: 这种事情就是炸过一次就知道了 05/09 14:13
128F:推 mdkn35: 我都用uuid 05/09 14:23
129F:推 DerLuna: 这两个方法都不好吧 05/09 15:54
130F:推 cholux: 是有一点,不过看问题可能会有更好的作法 05/09 18:04
131F:推 panpan: 笑死 看到两个菜鸡户啄 05/09 20:32
132F:推 Frecci: 你太菜是真的 但是不代表他能够直接进入db删资料 05/09 22:45
133F:→ Frecci: 假设是用ui删除的话 那完全就你问题了 05/09 22:45
134F:推 paulshain04: 这怎麽会是自己新增 DB不是有自动流水号 column不用 05/10 09:09
135F:→ paulshain04: 填啊 05/10 09:09
136F:嘘 owen5566: == 这样写怎麽可能没问题 05/12 07:50
137F:嘘 rickboo0809: 超低级 05/12 10:41
138F:推 Tony427: 不管基本不基本,犯错要搞懂为何不能这样做,以及找出最 05/13 14:25
139F:→ Tony427: 佳做法,至少下次不要再犯 05/13 14:26
140F:→ newhandfun: 想必阁下跟我一样是没人带的菜鸟吧,能够发现问题提早 05/15 08:51
141F:→ newhandfun: 解决真是件好事。 05/15 08:51
142F:推 silent5566: 大家也不用嘲讽吧 每个人也是爆炸中成长QQ 05/16 10:35
143F:→ silent5566: 推Tony的心态 05/16 10:35







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Tech_Job 或 站内搜寻

TOP