sqlite3 удалить не удаляет все? - PullRequest
3 голосов
/ 11 марта 2010

Что здесь происходит? Я ожидал бы следующее удаление, чтобы удалить все из таблицы. Есть ли фундаментальное неправильное понимание того, как 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

Q : Почему счетчик показывает «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 ]

3 голосов
/ 11 марта 2010

Важно помнить, что в SQLite есть нечто, называемое type affinity , что означает, что тип данных каждого столбца просто рекомендуется и НЕ УДЕРЖИВАЕТСЯ. Все типы столбцов могут хранить данные любого типа. Это означает, что в вашем целочисленном столбце могут храниться числа больше 9999999999 или даже строки.

Я бы сделал следующее:

  1. Убедитесь, что все ваши значения ttl меньше 9999999999.
  2. Каков результат "select * from ip_domain_table limit 1" после вашего первого удаления? Если в столбце ttl вашего результата есть строка или число больше 9999999999, у вас есть ответ.

Нет ничего плохого в простом использовании delete from ip_domain_table;, как вы делаете выше.

Удачи!

0 голосов
/ 11 марта 2010

Прежде всего, обратите внимание, что столбец ttl вашей таблицы НЕ первичный ключ. Может содержать значения больше указанного вами 9999999999.

Затем, если вы хотите удалить все записи из таблицы, попробуйте вместо этого:

DELETE FROM ip_domain_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...