Skip to content

订单里 7 和 8 空着,有人想把 9 改成 7 ​

订单里 7 和 8 空着。有人看见编号不连续,想把 9 改成 7。

翻一个跑了几年的订单表,状态字段的注释是这样:

0 待支付、1 待发货、2 部分发货、3 待核销、
4 待收货、5 已收货、6 已完成、9 已取消

7 和 8 呢?没有。

这不是写错了,是历史。 大概率是曾经有过两个状态,后来业务变了删掉了,剩下的编号没动。

换句话说:这两个数字是两个已经死掉的功能留下的墓碑。

新人看到会手痒,想把 9 改成 7,让它连续。千万别。

原因很实在:

一、数据库里躺着几百万行 status = 9 的历史订单。 改枚举就要刷全表,刷的过程中新订单还在写。

二、这个值可能已经流出去了。 前端硬编码了 status === 9、报表 SQL 里写着 WHERE status = 9、对接的第三方系统按 9 判断已取消。你只能改自己看得见的那部分。

三、收益是零。 连续的枚举值不会让系统快一毫秒,
也不会让任何一个用户少点一次。它只会让你自己看着舒服半天。

同理,空出来的 7 和 8 也别拿去给新状态用。万一某个角落还留着老数据或老逻辑,新状态就撞上了老语义——这种 bug 查起来要命,因为数据看着完全合法。

新状态就往后排,10、11、12。 往后排就行,编号不是稀缺资源。

枚举值一旦写进数据库,它就不再是代码,是数据。 数据只能追加,不能重排。

签名-C

大粽子