sqlite 如何使用sequelize重置autoIncrement主键?

dced5bon  于 2023-05-18  发布在  SQLite
关注(0)|答案(3)|浏览(149)

我使用sqlite3作为我的数据库,并使用sequelize库来处理它。我有一个模块,并希望在截断它后重置autoIncrement主键。

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

        where:{},
        truncate: true
    })

但是我发现这种方法只是清除了表中的所有记录,并没有将autoIncrement的主键重置为零。
在清除表中的所有记录后,是否有方法重置主键?

egmofgnx

egmofgnx1#

你应该传递restartIdentity: true来销毁/截断sequelize中的方法。

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

restartIdentity-仅与TRUNCATE结合使用。自动重新启动被截断表的列所拥有的序列。
对于sequelize为sqlite生成的id字段,这并不像预期的那样工作。
你必须显式地调用SQL:

await sequelize.query(`DELETE FROM "sqlite_sequence" WHERE "name" = 'table_name'`)
djmepvbi

djmepvbi2#

SQLite使用特殊的SQLITE_SEQUENCE表来跟踪表中最大的ROWID。每当创建包含AUTOINCREMENT列的普通表时,都会自动创建和初始化SQLITE_SEQUENCE表。
销毁表之后,必须执行一个查询来重置表的SQE

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

0yycz8jy3#

用这个;

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

相关问题