如何使用sequelize重置autoIncrement主键?

时间:2019-05-03 09:08:58

标签: node.js sqlite sequelize.js

我将sqlite3用作数据库,并使用“ sequelize”库进行处理。 我有一个模块,想要在截断它后重设autoIncrement主键。

    var logModule = db.logModule()
    logModule.destroy({

        where:{},
        truncate: true
    })

但是我发现这种方式只是清除表中的所有记录,而没有将autoIncrement主键重置为零。

清除表中的所有记录后,有什么方法可以重置主键吗?

3 个答案:

答案 0 :(得分:1)

您应该传递restartIdentity: true来破坏/截断序列化方法。

   models[modelName]
     .destroy({ truncate: true, restartIdentity: true })

restartIdentity-仅与TRUNCATE结合使用。自动重新启动被截断表的列所拥有的序列。

答案 1 :(得分:0)

使用它;

Object.values(sequelize.models).map(function(model) {
  return model.destroy({ truncate: true });
}); 

答案 2 :(得分:0)

SQLite使用特殊的ROWID表跟踪表曾经拥有的最大SQLITE_SEQUENCE。每当创建包含SQLITE_SEQUENCE列的普通表时,都会自动创建并初始化AUTOINCREMENT表。

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

sequelize.query("UPDATE SQLITE_SEQUENCE SET SEQ=0 WHERE NAME='log_module_table_name'");