0

サンプルレールアプリケーションでsqlite dbを使用しています。ユーザーテーブルから、を使用してすべてのレコードをクリアしUser.delete_allました。しかし、今では、を使用してテーブルに新しいレコードを挿入するたびUser.createに、id は、テーブルにあった最後のレコードの id よりも 1 大きい値から始まります。たとえば、テーブルに 5 つのレコードがあり、すべてをクリアした場合、User.create を実行すると、ID 6 から始まります。ID を 1 から再度開始する方法はありますか?

ありがとうございました

4

2 に答える 2

5

同様の質問:レールで単一のテーブルをリセットするには? . Railsコンソールで次を実行して、sqliteテーブルのid列を1にリセットできます

ActiveRecord::Base.connection.execute("DELETE from sqlite_sequence where name = '<table_name>'") 
于 2012-12-15T12:28:24.403 に答える
3

id 列の自動インクリメントがオンになっているようです。Sqlite は、これらの値を と呼ばれる内部テーブルで処理しますsqlite_sequence。次のクエリを実行して、特定の自動インクリメント対応テーブルの ID をリセットできます。

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

ただし、自動インクリメント機能は、ユーザーがそのアルゴリズムに影響を与えないように使用することを意図しているため、これは良い考えではありません。理想的には、id の実際の値を気にする必要はなく、レコードの一意の識別子としてのみ考慮する必要があります。

于 2012-12-15T12:27:07.083 に答える