如何在TypeORM迁移中正确创建自增整数字段
问题原因
配置缺少自增对应的生成策略参数,导致自增属性未生效。isGenerated: true的作用仅为标记该列值由系统自动生成、不需要手动插入,并不直接等价于MySQL的AUTO_INCREMENT(即你在Workbench里看到的AI标识)。该参数必须搭配generationStrategy显式指定值的生成规则,缺省配置下TypeORM不会主动为整数主键添加MySQL自增属性,部分版本甚至会默认使用适配PostgreSQL的序列生成逻辑,完全无法触发MySQL自增配置。
修复方案
在id列的配置中补充generationStrategy: 'increment'即可,修正后的列配置代码如下:
{ name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" }
修改后重新执行迁移,id列就会被正确标记为AI自增属性。
补充说明
- 如果是通过实体装饰器定义表结构,使用
@PrimaryGeneratedColumn()装饰器时TypeORM会自动补全上述两个配置,无需手动声明;但手写QueryRunner迁移代码时,必须显式配置所有自增相关参数,不能仅靠isGenerated触发生成逻辑。 - 注意不要把
generationStrategy设为uuid或者其他值,这类策略会生成字符串类型的唯一ID,不会触发整数自增效果。
内容的提问来源于stack exchange,提问作者Сашко Лисий
相关产品推荐
相关产品推荐

