sqlite3删除不删除所有内容?

时间:2010-03-11 05:07:46

标签: 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

2 个答案:

答案 0 :(得分:3)

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

我会做以下事情:

  1. 检查所有ttl值是否小于9999999999。
  2. 首次删除后,“select * from ip_domain_table limit 1”的结果是什么?如果结果的ttl列是一个字符串或大于9999999999的数字,那么你有答案。
  3. 简单地使用delete from ip_domain_table;并没有问题,就像你上面那样。

    祝你好运!

答案 1 :(得分:0)

首先,请注意您的表的ttl列是 NOT 主键。它可能包含大于您指定的9999999999的值。

然后,如果要删除表格中的所有条目,请尝试改为:

DELETE FROM ip_domain_table;