SQLiteの空のテーブルと自動インクリメントゼロ



Sqlite Empty Table Auto Increment Zero



SQL標準には、すべての内容の空のテーブルに対するTRUNCATETABLEステートメントがあります。しかし、SQLiteはこのステートメントをサポートしていません。

SQLiteを直接使用する 'DELETE FROMTableName'。



ほとんどのDBMSでは、テーブル全体にアクセスしないTRUNCATEは変更データを記録しないため、TRUNCATEDELETEを高速で使用することをお勧めします。

SQLiteはTRUNCATE、DELETEをサポートしていませんが、最適化されています。



'WHEREがDELETEステートメントから省略(省略)され、削除されるテーブルにトリガー(トリガー)がない場合、SQLiteは最適化(最適化)を使用して、テーブルの各行に個別にアクセスすることなく、テーブルの内容全体を消去します。この「切り捨て」最適化により、削除の実行がはるかに高速になります。 '

通常は空のテーブルで、自動インクリメントもゼロにする必要があります。 SQLiteへの包含の定義は次のとおりです。

CREATE TABLE TableName ( id INTEGER PRIMARY KEY AUTOINCREMENT, ... )

SQLiteデータベースに自動インクリメントが含まれている場合、sqlite_sequenceという名前のテーブルが自動的に作成されます。



このテーブルには、nameとseqの2つの列が含まれています。追加のレコード名テーブルが配置されているので、現在のレコード番号を続けます(次のレコードは現在の番号に1を加えたものです)。

数値ゼロを自動インクリメントする場合は、その上でsqlite_sequenceテーブルを変更するだけで済みます。

UPDATE sqlite_sequence SET seq = 0 WHERE name = 'TableName'

削除されたレコードに直接移動することもできます。

DELETE FROM sqlite_sequence WHERE name = 'TableName'

すべてのテーブルに追加されるのはゼロからで、その上に直接空のsqlite_sequenceテーブルがあります。

DELETE FROM sqlite_sequence