1

SQLiteその前にいくつかの行を削除した後、新しい行を追加する方法を知りたいです。たとえば、3 つのレコード/行と、それらの 3 つの自動インクリメント ID があります。

ID 1 
ID 2
ID 3

ID 2 のレコードを削除したので、次のようになりました。

ID 1
ID 3

ここで、新しいレコード/行を追加します。

そのデータベースは追加されますか、ID 4それとも追加されますかID 2(自動インクリメント時)? 最後のレコードから+1を追加するだけだと思いますが、よくわかりません。しかし、もしそうなら、それはデータベースのサイズにどのように影響しますか? 新しいレコードを頻繁に削除/追加すると、ID はいつの間にか 100 万になりますか? それは何か問題になるのでしょうか?スキップされた ID 番号 (削除された) を埋めるための自動インクリメントはありますか?

4

2 に答える 2

0

あなたの質問の多くは、SQLite のAUTOINCREMENTページで間接的に回答されていますが、要約したバージョンを提示します。

そのデータベースは ID 4 を追加しますか、それとも ID 2 を追加しますか (自動インクリメント時)?

4を使用します。

しかし、もしそうなら、それはデータベースのサイズにどのように影響しますか?

主キーのインデックスのサイズ大きくなりますが、各行のデータは数値インデックスよりもはるかに速くデータベースのサイズを大きくします。したがって、アプリの懸念事項ではありません。

新しいレコードを頻繁に削除/追加すると、ID はいつの間にか 100 万になりますか? それは何か問題になるのでしょうか?

SQLite が保持できる最大の ID は 9223372036854775807 で、100 万をわずかに超えています。この ID を (何らかの方法で) ミリ秒ごとに増やし、アプリを継続的に実行すると仮定すると、300,000 年以内にこの制限に達します。
希望を失うな!この後、SQLite は使用されていない ID をランダムに検索して ID を選択します。ID の「妥当な数」をチェックした後でのみ、SQLite はあきらめて、いっぱいであると主張するエラーをスローします。

スキップされた ID 番号 (削除された) を埋めるための自動インクリメントはありますか?

これを行うクエリを作成できると確信していますが、これらの空のインデックスを見つけると、アプリの速度が低下するだけです。したがって、上記の計算を考えると、私はそれを気にしません. :)

于 2013-02-20T21:25:46.707 に答える