Sequelize结合FeathersJS设置自定义自增ID起始值不生效
问题描述
我正在尝试创建一张自增字段起始值为1000的数据表,参考相关示例编写代码如下:
const Sequelize = require("sequelize"); const DataTypes = Sequelize.DataTypes; module.exports = function (app) { const sequelizeClient = app.get("sequelizeClient"); const users = sequelizeClient.define( "users", { first: { type: DataTypes.STRING, defaultValue: "User", //allowNull: true, }, }, { initialAutoIncrement: 1000, hooks: { beforeCount(options) { options.raw = true; }, }, } ); // eslint-disable-next-line no-unused-vars users.associate = function (model) { // Define associations here }; return users; };
按照上述写法配置initialAutoIncrement: 1000后无法实现自增起始值为1000的预期效果,请问该配置项应该放置在什么正确位置才能生效?
解决方法
你当前放置initialAutoIncrement的表级配置位置本身是正确的,配置不生效通常由两个原因导致:
- 未显式定义带自增属性的主键:Sequelize默认会自动生成
id主键,但部分版本下如果不显式给主键字段加autoIncrement: true声明,表级的initialAutoIncrement配置不会被识别生效。 - 配置仅在表首次创建时生效:如果
users表之前已经通过sync()创建完成,后续修改initialAutoIncrement再同步,不会修改已有表的自增起始值。
可直接生效的正确写法参考:
const Sequelize = require("sequelize"); const DataTypes = Sequelize.DataTypes; module.exports = function (app) { const sequelizeClient = app.get("sequelizeClient"); const users = sequelizeClient.define( "users", { // 显式声明自增主键 id: { type: DataTypes.INTEGER, autoIncrement: true, primaryKey: true }, first: { type: DataTypes.STRING, defaultValue: "User", }, }, { initialAutoIncrement: 1000, // 该配置放在表级配置项即可,无需移动位置 hooks: { beforeCount(options) { options.raw = true; }, }, } ); // eslint-disable-next-line no-unused-vars users.associate = function (model) { // 在此处定义表关联 }; return users; };
如果表已经创建完成,可以先删除旧表再重新执行sync同步,也可以直接执行SQL修改已有表的自增起始值:
ALTER TABLE users AUTO_INCREMENT = 1000;
提示:
initialAutoIncrement是MySQL、MariaDB专属的表配置项,PostgreSQL、SQLite等数据库不支持该配置,需要通过修改序列值的方式调整自增起始值。
内容的提问来源于stack exchange,提问作者Youzef
相关产品推荐
相关产品推荐

