我正在爲我的應用程序使用SQLite。當我在SQLite中使用truncate命令時,它給了我錯誤,如「語法錯誤在截斷附近」。需要SQLite數據庫幫助
任何人都可以幫助我解決這個問題或任何其他截斷除DELETE命令的其他選擇。
我正在爲我的應用程序使用SQLite。當我在SQLite中使用truncate命令時,它給了我錯誤,如「語法錯誤在截斷附近」。需要SQLite數據庫幫助
任何人都可以幫助我解決這個問題或任何其他截斷除DELETE命令的其他選擇。
爲什麼不刪除?
刪除與空WHERE子句應該是相當快,SQLite的,因爲它不做某事稱爲「截斷優化」,見
沒有。
只需使用DELETE而不帶任何參數。
這是它是如何通過的Drupal 7的數據庫抽象層來實現:
的SQLLite 刪除截斷優化DELETE FROM {table};
(無WHERE
條款)也有類似的行爲到SQL Server TRUNCATE TABLE {table};
。見SQLLite documentation here
取整優化
當從DELETE語句省略WHERE和被刪除的表沒有觸發條件時,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,可以永久禁用所有查詢的truncate優化。
SQLite DELETE FROM
不等同於T-SQL TRUNCATE TABLE
。
SQLite DELETE FROM
將不會重置標記爲autoincrement
的字段中的索引。
如果我使用了DELETE,我給了ID字段的自動增量,那麼ID將從最後一個數字繼續,並且我想從1開始編號。 – Dipen 2011-02-15 11:41:40