使用SQL为现有表创建并填充主键列的方案验证及优化咨询
方案验证结论
你提供的SQL是SQL Server 环境下的正确实现,完全可以达到你预期的效果:
- 新增
IDENTITY(1,1)属性的EmployeeID列时,数据库会自动为现有5条员工记录按顺序生成1~5的连续数值,完全匹配你给出的最终效果 - 后续新增员工记录无需手动赋值
EmployeeID,数据库会自动按规则生成唯一值,不会出现重复 - 因为IDENTITY列天生满足非空、唯一的要求,添加主键约束的步骤不会出现冲突,只要原表没有其他聚集索引,创建聚集主键的操作就可以正常执行
优化建议与注意事项
- 大表操作请选低峰期:如果你的表数据量超过10万条,创建聚集主键的过程会锁表,建议在业务访问量最低的时段执行,避免影响正常业务使用
- 主键类型可按需调整:如果你的业务后续可能出现员工数超21亿(int类型最大值)的情况,可以把
int替换为bigint,避免后续数值溢出的风险,常规员工规模的场景用int足够,占用存储空间更小 - 其他数据库环境调整写法:如果你的数据库是MySQL,原SQL语法不兼容,需要改为如下写法:
-- 新增自增列 ALTER TABLE tbl_employee ADD EmployeeID INT NOT NULL AUTO_INCREMENT; -- 设置为主键 ALTER TABLE tbl_employee ADD CONSTRAINT PK_tbl_employee_EmployeeID PRIMARY KEY (EmployeeID);
- 分布式场景可换主键生成规则:如果是多库分布式业务,后续需要做数据合并,可以把自增主键换成雪花ID、UUID等全局唯一的主键类型,普通单库业务用自增主键即可,查询和写入性能更高
内容的提问来源于stack exchange,提问作者Curious
相关产品推荐
相关产品推荐

