如何无需使用复合主键,创建含静态前缀与自增元素的主键
适配小规模数据库的落地方案
优先推荐:持久化计算列方案(完全无需复合主键)
- 表2依然保留
IDENTITY (1,1)的纯数字自增列作为唯一主键,不改动原有的自增逻辑 - 额外新增一个持久化计算列作为带前缀的业务ID字段,由数据库自动生成无需手动维护,示例代码(SQL Server环境):
ALTER TABLE 表2 ADD 业务ID AS 'M' + RIGHT('00000' + CAST(ID AS VARCHAR(5)), 5) PERSISTED;
- 上述代码生成的
业务ID格式为M00001、M00002,如果不需要补零只需要M1、M2格式,调整计算逻辑即可:
ALTER TABLE 表2 ADD 业务ID AS 'M' + CAST(ID AS VARCHAR(10)) PERSISTED;
- 优势:主键仍为高性能的纯数字自增ID,查询、索引效率无损耗,带前缀字段完全自动生成,后期调整格式也无需改动业务代码,实现成本极低。
备选方案:触发器实现带前缀ID直接作为主键
如果需要把带前缀的字符串直接作为主键列,可通过插入触发器自动生成ID,无需业务代码介入:
- 表2主键设为VARCHAR类型,插入前触发器自动获取当前表最大ID的数值部分,加1后拼接前缀写入主键列
- 优势:主键直接符合你需要的格式,无需额外字段,小规模低并发场景下无稳定性问题。
其他调研方案适配性说明
- 复合主键:完全不需要使用,上述两个方案均为单主键实现
- UUID:不推荐,无序UUID会增加索引维护开销,可读性也远低于带前缀的规则ID,不符合你的需求
- Hi/Lo算法、分布式ID生成方案:仅适合多节点、分布式数据库场景,你的小规模业务使用会额外增加维护成本,没有必要。
内容的提问来源于stack exchange,提问作者A. Mahar
相关产品推荐
相关产品推荐

