2011-02-15 10 views
2

私は自分のアプリケーションにSQLiteを使用しています。 SQLiteでtruncateコマンドを使用すると、 "syntax truncateの構文エラー"のようなエラーが表示されます。SQLiteデータベースのヘルプが必要

誰も私がこの問題またはDELETEコマンドを除くTRUNCATEのいずれかの他の代替を解決するために助けることができます。

答えて

1

削除しないのはなぜ?
(無WHERE句を使用して)SQLLite 削除切り捨ての最適化DELETE FROM {table};は似ている

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

+0

DELETEを使用するとIDフィールドの自動インクリメントが与えられ、IDは最後の番号から続き、IDは1から開始します。 – Dipen

+0

sqlite_sequenceテーブルから関連する行を削除することによって自動インクリメントをリセットできます:名=「my_pk_column」、これは危険なことかもしれませんが、見sqlite_sequence http://www.sqlite.org/autoinc.html –

+0

から削除私は、ポイントはあなたの助けに感謝です。 – Dipen

1

を参照してください、それがかなった「最適化を切り詰める」と呼ばれないため句はSQLiteの中ではかなり高速である必要がありますWHERE空とDELETE SQL Server TRUNCATE TABLE {table};に動作します。 SQLLite documentation here

切り捨て最適化

WHEREは、DELETE文から省略され、テーブルが削除されて何のトリガを持っていない参照してください、SQLiteは訪問することなく、テーブル全体の内容を消去するために最適化を使用していますテーブルの各行は個別にこの「切り詰め」最適化により、削除がはるかに高速に実行されます。 SQLiteバージョン3.6.5(2008年11月12日)前に、TRUNCATE最適化はまたsqlite3_changes()とsqlite3_total_changes()インターフェースとプラグマが実際に削除された行の数を返さないcount_changesことを意味します。この問題は、バージョン3.6.5(2008-11-12)の時点で修正されています。

切り捨ての最適化は、恒久的にSQLITE_OMIT_TRUNCATE_OPTIMIZATIONコンパイル時のスイッチでのSQLiteを再コンパイルすることにより、すべてのクエリのために無効にすることができます。

1

SQLite DELETE FROMは、T-SQL TRUNCATE TABLEと同等ではありません。

SQLite DELETE FROMは、autoincrementというフィールドのインデックスをリセットしません。