2010-03-11 4 views
3

무슨 일이야? 나는 테이블에서 모든 것을 삭제하기 위해 다음과 같은 삭제를 기대할 것이다. 내 부분에 sqlite3이 어떻게 작동하는지에 대한 근본적인 잘못 이해가 있습니까?sqlite3 delete가 모든 것을 삭제하지 않습니까?

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 

답변

3

그것은 SQLite는 각 열의 데이터 형식은 단지 권장 적용되지 않습니다 것을 의미한다 type affinity이라는 것을 가지고 것을 기억하는 것이 중요합니다. 모든 열 유형은 모든 유형의 데이터를 저장할 수 있습니다. 즉, 정수 열에 9999999999 또는 심지어 문자열보다 큰 숫자를 저장할 수 있습니다. 당신의 TTL 값이 모두

  • 미만 9999999999.이 결과 첫 번째 후, "ip_domain_table 제한 1 SELECT * FROM"어떻게 삭제되는 것을

    1. 확인 :

      나는 다음을 수행 할

      ? 결과의 ttl 열이 9999999999보다 큰 문자열 또는 숫자 인 경우 답변을 얻을 수 있습니다.

    위와 마찬가지로 간단하게 delete from ip_domain_table;을 사용하면 아무런 문제가 없습니다.

    행운을 빈다.

  • 0

    우선 테이블의 ttl 열은 이 아니며 기본 키는입니다. 지정한 9999999999보다 큰 값이 포함될 수 있습니다. 당신이 테이블의 모든 항목을 삭제하려면

    다음, 대신이 시도 :

    DELETE FROM ip_domain_table; 
    
    관련 문제