Ric*_*ker 6 sqlite node.js sequelize.js
我使用 sqlite3 作为我的数据库并使用“sequelize”库来处理它。我有一个模块,想在截断它后重置 autoIncrement 主键。
var logModule = db.logModule()
logModule.destroy({
where:{},
truncate: true
})
Run Code Online (Sandbox Code Playgroud)
但我发现这种方式只是清除我表中的所有记录,并没有将 autoIncrement promary key 重置为零。
清除表中的所有记录后,有没有办法重置主键?
您应该restartIdentity: true在 sequelize 中传递给 destroy / truncate 方法。
models[modelName]
.destroy({ truncate: true, restartIdentity: true })
Run Code Online (Sandbox Code Playgroud)
restartIdentity- 仅与 TRUNCATE 结合使用。自动重新启动被截断表的列拥有的序列。
对于 sqlite 的 sequelize 生成的 id 字段,这不能按预期工作。
您必须显式调用 SQL:
DELETE FROM `sqlite_sequence` WHERE `name` = 'table_name'
Run Code Online (Sandbox Code Playgroud)
SQLiteROWID使用特殊表跟踪表曾经容纳过的最大数据SQLITE_SEQUENCE。SQLITE_SEQUENCE每当创建包含列的普通表时,都会自动创建并初始化该 表AUTOINCREMENT。
销毁表后,您必须执行查询来重置SQE表的值
sequelize.query("UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='log_module_table_name'");
Run Code Online (Sandbox Code Playgroud)
用这个;
Object.values(sequelize.models).map(function(model) {
return model.destroy({ truncate: true });
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3423 次 |
| 最近记录: |