这是怎么回事?我希望以下删除删除表中的所有内容。对我的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
答案 0 :(得分:3)
重要的是要记住SQLite有一个叫type affinity的东西,这意味着每个列的数据类型只是推荐而不是ENFORCED。所有列类型都可以存储任何类型的数据。这意味着您的整数列可以存储大于9999999999的数字,甚至可以存储字符串。
我会做以下事情:
简单地使用delete from ip_domain_table;
并没有问题,就像你上面那样。
答案 1 :(得分:0)
首先,请注意您的表的ttl列是 NOT 主键。它可能包含大于您指定的9999999999的值。
然后,如果要删除表格中的所有条目,请尝试改为:
DELETE FROM ip_domain_table;