2011-03-23 19 views
3

중복 SQL 텍스트 필드 행을 방지 할 수 있기를 원합니다. 즉, 1 행에 "John Smith"라는 이름 필드가 이미 정의되어 있으면 다른 이름 인 John Smith를 추가 할 수 없기를 바란다.중복 SQL 항목 방지

삽입 당시 존재했는지 확인해 보았지만 동시에 두 개의 브라우저 창을 열어 동시에 제출하면 두 가지 모두 확인하고 확인이 취소 된 다음 문제가됩니다. 충분히 가깝게 삽입하면 둘 다 삽입됩니다.

아, 이것은 PHP 사이트에 있습니다.

감사합니다.

+0

mysql의 필드에서 고유 인덱스를 사용할 수 있습니까? PHP가 삽입 핸들을 할 때 중복 엔트리 오류가 발생합니다. – Jacob

답변

12
CREATE UNIQUE INDEX idxname ON tablename (fieldname); 

이 인덱스를 추가하면 fieldname 필드에 중복 항목이 tablename 테이블에 기록되지 않음을 보장합니다.

두 번째 클라이언트에서 MySQL 오류가 발생합니다. PHP 코드에서이 문제를 처리하고 오류 메시지를 표시하는 대신 양식을 다시 작성해야합니다.

다른 상황 (복잡한 경우)은 LOCK 기능입니다. 검사하기 전에 테이블을 잠그고 레코드를 삽입하면 (두 번째 브라우저 창에서) 동시 작업은 잠금을 해제 할 때까지 지연됩니다. 그런 다음 레코드가 이미 저장되므로 두 번째 PHP 스크립트는 을보고 출처를 처리합니다.

+2

이것에 대한 더하기 측면은 대부분의 데이터베이스 공급 업체가 고유 한 제약 조건 위반에 대해 특정 오류를 유발합니다. 즉, 스크립트에서이 오류를 발견 할 수 있습니다. – Phil

+0

우수 답변, 감사합니다! 기존 코드를 사용하면 이미 완료했음을 알리는 페이지로 넘어 가서 사용할 수 있습니다. 감사! – Kevin

0

DISTINCT 또한 고유 한 행을 선택하는 데 사용할 수 있습니다.

... 
select distinct * 
    from table1 
...