我在我的应用程序中使用SQLite。当我在SQLite中使用truncate命令时,它给出了类似“语法错误接近截断”的错误。
任何人都可以帮我解决这个问题或除DELETE命令之外的任何其他截断方法。
答案 0 :(得分:1)
为什么不删除?
带有空WHERE子句的DELETE应该在SQLite中相当快,因为它确实称为“截断优化”,参见
答案 1 :(得分:1)
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 pragma实际上不会返回已删除行的数量。自版本3.6.5(2008-11-12)以来,该问题已得到修复。
通过使用SQLITE_OMIT_TRUNCATE_OPTIMIZATION编译时开关重新编译SQLite,可以为所有查询永久禁用truncate优化。
答案 2 :(得分:1)
SQLite DELETE FROM
不等同于T-SQL TRUNCATE TABLE
。
SQLite DELETE FROM
不会在标记为autoincrement
的字段中重置索引。
答案 3 :(得分:0)
没有。
只使用没有任何参数的DELETE。
这是Drupal 7的数据库抽象层实现的方式: