2

sqliteデータベースは、挿入されたすべてのレコードに対して一意のID(自動インクリメント)を自動的に生成することを知っています。

置換クエリの実行中に、sqlite3データベースでシステムの一意のIDが不足する可能性があるかどうかを誰かが知っていますか?

つまり、データベース内のすべてのデータには独自のタイプがあります。たとえば、システムの一意のIDはintのようなものです。MAX_INTに等しい一意のIDを生成する場合、データベースは次のレコードをどのように処理しますか?

ありがとう。

4

2 に答える 2

8

可能な最大IDは9223372036854775807(2 ^ 63-1)です。いずれの場合も、新しい自動インクリメントの主キーが見つからない場合は、SQLITE_FULLを返します。

もう1つ重要な点があります。INTEGER PRIMARY KEYを使用すると、以前にテーブルにあったが削除されたキーを再利用できます。INTEGER PRIMARY KEY AUTOINCREMENTを使用する場合、自動インクリメントキーを再利用することはできません。

于 2012-05-23T20:46:20.117 に答える
7

http://www.sqlite.org/autoinc.html

「最大のROWIDが可能な最大の整数(9223372036854775807)と等しい場合、データベースエンジンは、以前に使用されていないものが見つかるまで、正の候補ROWIDの選択をランダムに開始します。妥当な回数の試行後に未使用のROWIDが見つからない場合は、挿入操作はSQLITE_FULLエラーで失敗します。負のROWID値が明示的に挿入されていない場合、自動的に生成されたROWID値は常にゼロより大きくなります。」

sqlite IDが64ビットであるとすると、次の546年間、100ミリ秒ごとに新しいレコードを挿入できます(これらの数値を作成しましたが、わかります)。

于 2012-05-23T20:47:00.770 に答える