0

sqliteのレコードを削除しようとしています。主キーとしてidを持つ4つのレコードrecord1、record2、record3、record4があります。

したがって、挿入するレコードごとに自動インクリメントされます。レコード3を削除すると、主キーがデクリメントされなくなりました。削除するレコードに基づいてIDをデクリメントするにはどうすればよいですか。

データベースからレコード3を削除するときに、idを1、2、3にします。今は1、2、4です。それを変更するSQLクエリはありますか?これを試してみました

DELETE FROM TABLE_NAME WHERE name = ?

注:私はxcodeで実装しています

4

2 に答える 2

1

自動インクリメントの意味は、常に新しい一意の ID を作成することであり、レコードの削除によって作成されたギャップを埋めることではありません。

編集

特別なテーブルデザインでアクセスできます。削除されたレコードはありませんが、フィールド「del」が削除済みとしてマークされています。

たとえば、" select ... where del> 0" を使用すると、すべてのアクティブなレコードが検索されます。

または、すべてのレコードを「where」なしで配置すると、ID は影響を受けません。「if del = 0 continue」で配列をループするには。したがって、配列は常に連続した順序になります。

とても柔軟です。セレクト次第で・・・お得です。

  • すべてのアクティブなレコード
  • 削除されたすべてのレコード
  • すべての記録
于 2012-06-10T07:56:35.140 に答える
1

なぜこれが必要なのかわかりませんが、これらの ID はそのままにしておくことをお勧めします。ID が 1、2、4 であることの何が問題になっていますか? また、これらの ID 値を別の場所で外部キーとして使用すると、問題が発生する可能性があります (参照整合性)。

また、このページを参照して、自動インクリメント フィールドがどのように機能するかをよりよく理解して ください http://sqlite.org/autoinc.html

于 2012-06-10T07:56:42.103 に答える