【问题标题】:Reset the id field in a table in a sqlite db in Rails在 Rails 的 sqlite db 中重置表中的 id 字段
【发布时间】:2012-12-15 12:14:24
【问题描述】:

我在示例 Rails 应用程序中使用 sqlite db。从我的用户表中,我使用User.delete_all 清除了所有记录。但是现在每当我使用User.create 在表中插入新记录时,id 的开始值比表中最后一条记录的 id 大一。例如,如果我的表有 5 条记录并且我清除了所有记录,那么当我执行 User.create 时,它​​从 id 6 开始。 有什么办法可以让 id 再次从 1 开始?

谢谢

【问题讨论】:

  • 我相信您会执行 rake db:reset 或类似操作来清除索引。或者,您可以使用:sqlite.org/lang_reindex.html。但是,为什么需要这样做呢??
  • 通过在 rails 控制台运行以下命令修复:ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = 'users'")

标签: ruby-on-rails sqlite activerecord


【解决方案1】:

类似问题:How to reset a single table in rails?。我们可以在 rails 控制台运行以下命令,将 sqlite 表的 id 列重置为 1

ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = '<table_name>'") 

【讨论】:

    【解决方案2】:

    您似乎为 id 列启用了自动增量。 Sqlite 在名为sqlite_sequence 的内部表中处理这些值。您可以通过以下查询重置特定启用自动增量的表的 id:

    UPDATE "sqlite_sequence" SET "seq" = 0 WHERE "name" = $YOURTABLENAME
    

    但是,这不是一个好主意,因为自动增量功能旨在以一种用户不影响其算法的方式使用。理想情况下,您不应关心 id 的实际值,而应仅将其视为记录的唯一标识符。

    【讨论】:

    • 感谢您的回复 :)。另一种方法是使用 rails 控制台中的活动记录 api,这就是我所做的。
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 2012-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-08
    • 2021-07-14
    相关资源
    最近更新 更多