这是怎么回事?我希望以下删除操作可以删除表中的所有内容。我对 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 的数字,甚至是字符串。
我会做以下事情:
- 检查您的所有 ttl 值是否都小于 9999999999。
- 第一次删除后,“select * from ip_domain_table limit 1”的结果是什么?如果结果的 ttl 列是字符串或大于 9999999999 的数字,那么您就有答案了。
像上面那样简单地使用 delete from ip_domain_table;
没有任何问题。
祝你好运!
关于sqlite3 delete 不会删除所有内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2422670/