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