在示例rails應用程序中使用sqlite數據庫。從我的用戶表中,我已使用User.delete_all
清除了所有記錄。但是現在每當我在表格中使用User.create
插入一條新記錄時,id的值就會比表中最後一條記錄的id值多一個。例如,如果我的表有5條記錄,我清除了所有,那麼當我做User.create,它從id 6開始。 有什麼辦法可以使id從1開始?重置Rails中sqlite數據庫表中的id字段
謝謝你
在示例rails應用程序中使用sqlite數據庫。從我的用戶表中,我已使用User.delete_all
清除了所有記錄。但是現在每當我在表格中使用User.create
插入一條新記錄時,id的值就會比表中最後一條記錄的id值多一個。例如,如果我的表有5條記錄,我清除了所有,那麼當我做User.create,它從id 6開始。 有什麼辦法可以使id從1開始?重置Rails中sqlite數據庫表中的id字段
謝謝你
你似乎有id列自動增加打開。 Sqlite在名爲sqlite_sequence
的內部表中處理這些值。你可以通過查詢重置爲特定的啓用自動遞增表的ID:
UPDATE "sqlite_sequence" SET "seq" = 0 WHERE "name" = $YOURTABLENAME
然而,這不是一個好主意,因爲自動增量功能專用的方式,用戶不影響其算法中使用。理想情況下,您不應該關心您的ID的實際價值,而只是將其視爲記錄的唯一標識符。
感謝您的回覆:)。另一種方法是從rails控制檯使用活動記錄API,這正是我所做的。 – Jim
相似問題:How to reset a single table in rails?。我們可以爲SQLite表
ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = '<table_name>'")
我相信你會做一個耙分貝運行在軌道控制檯下面重置ID列,以1:復位或類似清除指數。或者,你可以使用這個:http://www.sqlite.org/lang_reindex.html。但是,爲什麼你需要這樣做? – simonmorley
通過在rails控制檯上運行以下內容來修復:ActiveRecord :: Base.connection.execute(「從sqlite_sequence刪除其中name ='users'」) – Jim