2010-05-30 6 views
1

SQLite 테이블에 새 행을 삽입하려고하지만 중복 행을 삽입하고 싶지 않습니다.SQLite 데이터베이스에서 중복 행을 업데이트하는 것을 방지하려면 어떻게해야합니까?

가능하면 데이터베이스의 모든 열을 지정하고 싶지 않습니다. 이것이 가능한지 나는 모른다.

내 값을 가져 와서 새 행을 만들 수 있어야하지만, 다른 행을 복제하면 기존 행을 덮어 쓰거나 아무 것도하지 않아야합니다.

답변

1

당신의 욕망은 서로 모순 표시 관심 있습니다. Andrey의 insert or replace 답변을 통해 원하는 내용에 접근 할 수 있지만 실제로 원하는 내용은 무엇인지 분명히해야합니다.

모든 열을 지정하고 싶지 않고 삽입하는 대신 부분적 행을 업데이트하려는 경우 unique constraint을 확인하고 요구 사항의 모호성도 SQL92 Committee.

3

이것은 데이터베이스 디자인 및 정규화의 첫 번째 단계 중 하나입니다. 중복 행을 명시 적으로 정의한 다음 해당 정의를 나타내는 테이블의 열에 기본 키 제약 조건 (또는 고유 제한 조건)을 배치 할 수 있어야합니다.

이 무엇을 의미하는지 정의하기 전에 테이블에 포함 할 내용을 정확히 정의 (또는 결정)해야합니다. 즉, 실제 비즈니스 도메인 엔티티 또는 테이블의 각 행을 나타내는 추상화를 나타내는 또는 데이터를 보유합니다 ...

이 작업을 완료하면 PK 또는 고유 제한으로 인해 중복 행을 삽입하지 못하게됩니다. 동일한 PK는 존재할 때 중복 행을 찾고 기존 중복 행의 값과 다른 비 중복 정의 (비 PK) 열의 값으로 업데이트하는 데 도움이됩니다. 이 모든 작업이 완료된 후에 만 ​​SQL Lite에서 정의한대로 삽입 또는 교체로 도움말을 처리 할 수 ​​있습니다. 이 명령은 yr PK 제약 조건에 의해 지정된 중복 행이 있는지 여부를 확인한 다음 새 행을 삽입하는 대신 해당 행의 PK가 정의되지 않은 열을 Replace 쿼리에 의해 spplied 값으로 업데이트합니다.

+1

또는 디자인에 대한 생각을 피할 수 있고 작업 해킹이 가능한 첫 번째 작업을 사용하고 6 개월 만에 첫 번째 구현이 유지 관리에 너무 취약하고 "DBM"을 비난하고 이동하는 이유에 대해 의문을 가질 수 있습니다. 에 다음 일에 ...;) – msw

관련 문제