如何使用 sequelize 重置 autoIncrement 主键?

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 重置为零。

清除表中的所有记录后,有没有办法重置主键?

Gap*_*sym 8

您应该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)


hoa*_*gdv 6

SQLiteROWID使用特殊表跟踪表曾经容纳过的最大数据SQLITE_SEQUENCESQLITE_SEQUENCE每当创建包含列的普通表时,都会自动创建并初始化该 表AUTOINCREMENT

销毁表后,您必须执行查询来重置SQE表的值

sequelize.query("UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='log_module_table_name'");
Run Code Online (Sandbox Code Playgroud)


nar*_*a91 0

用这个;

Object.values(sequelize.models).map(function(model) {
  return model.destroy({ truncate: true });
}); 
Run Code Online (Sandbox Code Playgroud)