1

sqlite に自動インクリメント主キーを持つテーブルがあります。テーブルに次のレコードがあるとしましょう。

1 hi
2 hello
3 bye
4 goodbye

bye を削除して別のレコードを追加すると、新しいレコードの ID は 5 になります。しかし、goodbye を削除して新しいレコードを追加すると、新しいレコードの ID は 4 になります。これにより、最後のレコードの追跡が失われます。何度も削除および追加された場合。とにかく、新しい記録を 4 ではなく 5 にすることはできますか?

4

3 に答える 3

0

あなたが説明するのは、として宣言された列INTEGER PRIMARY KEYです。

代わりに欲しいのはINTEGER PRIMARY KEY AUTOINCREMENT.


例:

sqlite> CREATE TABLE MyTable(ID INTEGER PRIMARY KEY AUTOINCREMENT);
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> DELETE FROM MyTable WHERE ID = 2;
sqlite> INSERT INTO MyTable DEFAULT VALUES;
sqlite> SELECT * FROM MyTable;
1
3
于 2013-01-29T07:54:07.150 に答える
0

INTEGER PRIMARY KEY AUTOINCREMENT の定義を見てみましょう。

INSERT では、ROWID または INTEGER PRIMARY KEY 列に値が明示的に指定されていない場合、未使用の整数 (通常は現在使用されている最大の ROWID よりも 1 つ多い値) が自動的に入力されます。 AUTOINCREMENT キーワードが使用されます。

そのため、目的を達成するために INTEGER PRIMARY KEY AUTOINCREMENT を忘れる必要があります。代わりに、列 myKey を作成し、テーブルに挿入された行の数を保持する静的メソッドでこの列の値を設定できます。

于 2014-08-24T11:19:24.580 に答える