假设一个数据库表中有10中类型商品,每个商品的流水号是独立的,比如新增2个A商品的流水号为0001和0002,新增1个B商品流水号从0001开始,之后又新增1个A商品,流水号从0003开始,再新增1个B商品流水号从0002开始,之后又新增1个C商品,流水号从0001开始。
3条回答 默认 最新
CSDN专家-文盲老顾 2021-07-27 09:38关注这种自动编号,有一个最大的问题,就是数据行物理删除后,序号的问题,比如现在有 a001,a002,a003,如果物理删除了 a002,再次插入,应该是 a004,而不是通过count得到的a003,如果删除了 a003,再次插入,也应该是 a004,而不是 根据当前最大序号计算出来的 a002+1得到的a003
所以,最好的办法,是做一个冗余表,专门用来计算和存储序号,表结构可以是这样
id,商品类型,流水号年份,商品流水对应的流水id
然后根据流水id,获得这个序号表中对应行的 row_number 结果,并与年份组合成流水号,只要这个表的数据不物理删除,即不会出现其他问题
所以,整个方案是:建立一个流水号表,建立一个根据流水ID获取流水号的自定义函数,建立一个触发器,禁止流水号表的修改和删除
本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报解决 1无用