sqlite3 delete 不会删除所有内容吗?

标签 sqlite

这是怎么回事?我希望以下删除操作可以删除表中的所有内容。我对 sqlite3 的行为方式有根本性的误解吗?

sqlite> .schema

CREATE TABLE ip_domain_table (ip_domain TEXT, answer TEXT, ttl INTEGER, PRIMARY KEY(ip_domain, answer, ttl));

sqlite> select count(*) from ip_domain_table where ttl < 9999999999 ;

1605343

sqlite> pragma cache_size=100000; delete from ip_domain_table where ttl < 9999999999; 

sqlite> select count(*) from ip_domain_table where ttl < 9999999999 ;

258

:为什么计数显示“258”?不应该是0吗?

如果我改为这样做,它会按预期删除所有条目。

sqlite> select count(*) from ip_domain_table;

1605343

sqlite> pragma cache_size=100000; delete from ip_domain_table;

sqlite> select count(*) from ip_domain_table;

0

最佳答案

重要的是要记住 SQLite 有一个叫做 type affinity 的东西,这意味着每一列的数据类型只是推荐的,而不是强制的。所有列类型都可以存储任何类型的数据。这意味着您的整数列可以存储大于 9999999999 的数字,甚至是字符串。

我会做以下事情:

  1. 检查您的所有 ttl 值是否都小于 9999999999。
  2. 第一次删除后,“select * from ip_domain_table limit 1”的结果是什么?如果结果的 ttl 列是字符串或大于 9999999999 的数字,那么您就有答案了。

像上面那样简单地使用 delete from ip_domain_table; 没有任何问题。

祝你好运!

关于sqlite3 delete 不会删除所有内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2422670/

相关文章:

安卓。 ExpandableListAdapter 和 Sqlite

sql - 将 mysql 数据库转换为 sqlite 数据库的最佳方法是什么?

scala - SQLException : unknown database with SQLite and Scala

java - 如何在一个PrepareStatement (sqlite) 中使用Array 或List<>

android - 如何在 SQLite 数据库上使用游标

iphone - Sqlite打开错误“无法打开数据库”

full-text-search - 我应该为 SQLite3 使用哪个全文搜索包?

python - 通过变量更改 SQL 数据库值

sqlite - 在不依赖 glib 的情况下使用来自 vala 的 sqlite

ruby-on-rails - 使用rake db:create命令时出错(Ruby on Rails)