如何阻止Sequelize向MySQL自增主键id字段传入DEFAULT值?
解决Sequelize插入时向自增主键传入DEFAULT的问题
嘿,我来帮你搞定这个问题!你现在遇到的情况是Sequelize在执行INSERT时,自动给自增主键id加上了DEFAULT值,想要让它完全不把id字段放到插入语句里对吧?
下面给你几个实用的解决方案,按优先级推荐:
1. 完善主键字段的定义
在你的id字段定义里加上allowNull: false,因为自增主键本身是不允许为null的,加上这个属性后,Sequelize能更准确地识别这个字段是由数据库自动生成的,不会在插入时把它包含进语句里:
var TestTable= sequelize.define('testtables', { id:{ type:Sequelize.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false // 新增这一行 }, forgot_code:Sequelize.INTEGER, customer_id:Sequelize.INTEGER },{ timestamps: false, });
2. 显式指定插入字段
在调用create()方法时,通过fields选项明确指定要插入的字段列表,这样Sequelize只会处理你指定的字段,完全不会涉及id:
TestTable.create( { forgot_code: 610, customer_id: 199 }, { fields: ['forgot_code', 'customer_id'] } // 指定仅插入这两个字段 );
3. 启用omitNull配置(针对旧版本Sequelize)
如果你的Sequelize版本比较低,可以在模型的配置里加上omitNull: true,这样Sequelize会自动忽略那些值为null的字段(自增主键在插入时没有赋值,会被自动忽略):
var TestTable= sequelize.define('testtables', { // 字段定义保持不变 },{ timestamps: false, omitNull: true // 新增这一行 });
一般来说,第一种方法就足够解决问题了,完善字段定义后,Sequelize就能正确识别自增主键的特性,不会再把id字段加到INSERT语句里。如果还是有问题,结合第二种方法显式指定字段,肯定能达到你想要的效果。
内容的提问来源于stack exchange,提问作者jdotdoe
相关产品推荐
相关产品推荐

