SQLite 自動インクリメント主キー リセット メソッド
自動インクリメントされる主キー値のリセットは、SQLite データベースを使用する場合によくある問題です。この記事ではこれを調査し、効果的な解決策を提供します。
シナリオと質問
ユーザーが SQLite データベース内の複数のテーブルの自動インクリメント フィールドをリセットしようとしました。ただし、DELETE FROM
コマンドを使用してすべてのデータを削除しても、フィールドは 0 にリセットされません。対照的に、自動インクリメントは、データが削除された後も最後の値からインクリメントを続けます。
詳しい説明
この問題は、SQLite が SQLITE_SEQUENCE
という名前の別のテーブルを使用して各テーブルの最大の ROWID 値を追跡するために発生します。新しいレコードが挿入されると、AUTOINCREMENT アルゴリズムが SQLITE_SEQUENCE
テーブルをチェックして、次に使用可能な主キー値を決定します。
メインテーブルからデータを削除すると、関連する行のみが削除されます。 SQLITE_SEQUENCE
テーブルは変更されないため、自動インクリメント カウンタは最後の値から増加し続けます。
解決策
主キー フィールドを希望の値にリセットするには、次の 2 つのステートメントを実行します。
<code class="language-sql">DELETE FROM your_table; DELETE FROM sqlite_sequence WHERE name='your_table';</code>
最初のステートメントは、メインテーブル内のすべてのデータを削除します。 2 番目のステートメントは、SQLITE_SEQUENCE
テーブル内のそのテーブルのエントリを削除し、実質的に最高の ROWID 値を 0 にリセットします。
その他の注意事項
SQLITE_SEQUENCE
テーブルの変更は注意して行う必要があります。 以上がSQLite で自動インクリメントされる主キーをリセットするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。