2010-03-27 3 views
8

중복 레코드가 발생하지 않도록 고유 키 제약 조건이 정의 된 데이터베이스 테이블이 있습니다.중복 레코드 확인 VS 시도/catch 고유 키 제약 조건

테이블에서 INSERT 문을 실행하기 전에 중복 레코드를 수동으로 확인하지 않는 것이 좋지 않은지 궁금합니다.

즉, INSERT 할 레코드의 중복 값을 확인하는 WHERE 절을 사용하여 SELECT 문을 실행해야합니까? 기록이 발견되면 인해 발생 될 수있는 예외를 캐치/후 .... 계속 진행하여 INSERT를 실행 그렇지 않으면 INSERT 문을 실행하지 않는

또는

그냥 INSERT 문을 실행하고 시도 고유 키 위반.

나는 두 가지 관점을 비교하고 어느 것이 최상인지 결정할 수 없습니다. 1. 예외를 위해 트랩 할 수있을 때 중복을 확인하기 위해 SELECT 호출을 낭비하지 마십시오. VS 못생긴 try/catch 논리를 구현하여 게으름 뱅이 VS 3. ??? 당신의 생각은 여기 ??? :)

답변

7

정말 try..catch 메서드를 사용해야합니다. 덜 우아 할 수도 있지만 절대적으로 중요합니다.

이 테이블을 업데이트하는 클라이언트가 두 명 이상인 경우 다른 클라이언트가 수표와 삽입 사이에 레코드를 삽입 할 수 있습니다. 원한다면 여전히 불필요한 삽입을 시도하지 않고도 저장할 수 있습니다. 그것이 당신이 걱정하고있는 경우라면 약간의 성능 향상이있을 수 있지만, 이 중복되면입니다. 그러나 언제든지 이 중복되어이 아닌 경우 SELECT 및 INSERT를 모두 수행하여 성과 위약을 지불했습니다.

어쨌든 제약 조건 위반이 발생할 확률은 얼마입니까? 아마 작은, 그래서 수표로 귀찮게 왜?

3

중복 항목을 확인해도 새 항목을 삽입하고 삽입하기 전에 삽입 할 수 있으므로 여전히 try/catch 블록이 필요합니다.

3

시도/캐치는 테이블을 한 번만 터치하기 때문에 안전하고 확장 성이 뛰어납니다. 은 try/캐치

이 너무

lesson 4 from this article를 참조 이전 버전에서 솔직히 이상한 오류 처리를 제거
관련 문제