質問

私は私のデータベースにとして宣言された1つのフィールドを持つテーブルがあります。

_id integer primary key
.

自己侵入はありません。

ここでは、削除後に挿入中にROWIDがどのように更新されるかについて疑問があります。私が観察したことはです

  1. 最後の行IDがXの場合は削除された場合、次の行はID Xを取得します。

    しかし、ID

    確認先の右側にあることを確認してください(ROWIDは、最後の行が削除され、行の間には削除されていない場合にのみ再使用されます。)

    自動補足の説明を見ました。自動インクリメントが設定されていないときの動作を知りたい

役に立ちましたか?

解決

SQLiteテーブルには自動入力キーワードが自動的に主キー値を生成する必要はありません。 データベースに追加することが最後の行として追加されます。追加はx + 1ポジションに行きます...

オートインクリメントを使用するx位置で最後の要素を削除すると、自動インクリメントアルゴリズムによって次のID x + 1が生成されます.. makin次のX + 1位置での次の追加..

他のヒント

自動インクレントセットがないと、行はROWIDのエイリアスになります...

これはよくある質問が言うことです:

挿入にROWIDが指定されていない場合、または指定されたROWIDにNULLの値がある場合は、適切なROWIDが自動的に作成されます。通常のアルゴリズムは、新しく作成された行に、挿入前に最大のROWIDより大きいROWIDよりも大きいROWIDを与えることです。テーブルが最初に空の場合、1のROWIDが使用されます。最大のROWIDが最大の整数(9223372036858807)に等しい場合、データベースエンジンは、以前に使用されていないものが見つかるまで、ランダムに正の候補ROWIDをピッキングし始めます。妥当な試行回数の後に未使用のROWIDが見つからない場合は、SQLite_fullエラーで挿入操作が失敗します。負のROWID値が明示的に挿入されていない場合は、自動的に生成されたROWID値が常にゼロより大きくなります。

上記の通常のROWID選択アルゴリズムは、最大ROWID値を使用することはない限り、単調に増加する独自のROWIDを生成し、最大のROWIDを使用してテーブル内のエントリを削除することはありません。行を削除したことがある場合、または可能な限り最大ROWIDを持つ行を作成する場合は、新しい行を作成するときにROWIDが再利用され、新しく作成されたROWIDが厳密に昇順に昇順にならない可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top