次のステートメントを使用してテーブルを削除すると、疑問があります。
SQLiteDatabase db = this.getWritableDatabase();
db.delete(date_difference, null, null);
次に、行を新しい最初のレコードとしてテーブルに挿入する場合、レコードのidプライマリキーの自動増分は1から始まりますか?
次のステートメントを使用してテーブルを削除すると、疑問があります。
SQLiteDatabase db = this.getWritableDatabase();
db.delete(date_difference, null, null);
次に、行を新しい最初のレコードとしてテーブルに挿入する場合、レコードのidプライマリキーの自動増分は1から始まりますか?
挿入にROWIDが指定されていない場合、または指定されたROWIDの値がNULLの場合、適切なROWIDが自動的に作成されます。通常のアルゴリズムは、新しく作成された行に、挿入前のテーブル内の最大のROWIDよりも1つ大きいROWIDを与えることです。 テーブルが最初に空の場合、1のROWIDが使用されます。最大のROWIDが可能な最大の整数(9223372036854775807)と等しい場合、データベースエンジンは、以前に使用されていないものが見つかるまで、正の候補ROWIDの選択をランダムに開始します。
そうです、テーブルを削除すると、IDは1から始まります
提供されているドキュメントには、その削除方法は次のように記載されています。
Convenience method for deleting rows in the database.
構文は次のとおりです。
int delete(String table, String whereClause, String[] whereArgs)
したがって、1から再開することはありません。最後の増分から続行します。テーブル全体を削除してから再作成した場合、増分は1から始まります。
SQLiteは、「sqlite_sequence」という名前の内部テーブルを使用して、テーブルがこれまでに保持した最大のROWIDを追跡します。sqlite_sequenceテーブルは、AUTOINCREMENT列を含む通常のテーブルが作成されるたびに自動的に作成および初期化されます**。sqlite_sequenceテーブルの内容は、通常のUPDATE、INSERT、およびDELETEステートメント**を使用して変更できます。ただし、このテーブルに変更を加えると、AUTOINCREMENTキー生成アルゴリズムが混乱する可能性があります。このような変更を行う前に、自分が何をしているかを確認してください。
したがって、テーブルを削除して再作成するときは、SQLITE_SEQUENCEを0から再起動する必要があります。
あなたはこのようなことをするべきです:
Delete from date_difference;
Delete from sqlite_sequence where name='date_difference';
'table name'
where句のフィールドでは大文字と小文字が区別されるため注意してください。
詳細については、これをお読みください。
主キーフィールドを次のように定義します
INTEGER PRIMARY KEY AUTOINCREMENT DEFAULT 1
次に、次のように主キーフィールドに値を挿入する場合は、コードを削除します。
values.put(KEY_PRIMARY, object.getIntegerValue());