2012-11-14 2 views
1

내 테이블 cadastro :중복 문자열 ('') 인 경우 중복 데이터 (UNIQUE) 삽입을 무시하는 방법?

cod_bolsa VARCHAR(7) PRIMARY KEY 
nome VARCHAR(70) NOT NULL 
endereco VARCHAR(100) NOT NULL 
email VARCHAR(50) NOT NULL 
telefone VARCHAR(13) NOT NULL 
celular VARCHAR(14) NOT NULL 
cpf VARCHAR(14) UNIQUE 
cnpj VARCHAR(18) UNIQUE 
rg VARCHAR(12) UNIQUE 
datanasc VARCHAR(12) NOT NULL 

쿼리 :

INSERT INTO cadastro VALUES(
'000036', 
'JULIO CESAR', 
'AV. FRANZ VOEGELI, 300 - VILA YARA, SÃO PAULO/SP', 
'[email protected]', 
'(11)2345-6789', 
'(11)99876-5432', 
'987.654.321.00', 
'', 
'98.765.432-1', 
'1972-5-12' 
); 


INSERT INTO cadastro VALUES(
'000125', 
'JOAO MARIA', 
'AV. FRANZ VOEGELI, 300 - VILA YARA, SÃO PAULO/SP', 
'[email protected]', 
'(11)2345-6789', 
'(11)91676-1334', 
'012.234.567-89', 
'', 
'01.234.345-8', 
'1991-1-20' 
); 

MySQL은 분명히 피할 수있는 방법

ERROR 1062 (23000): Duplicate entry '' for key 'cnpj' 

을 말한다?

+1

필드를 고유하지 않게 설정하십시오. – Tom

+3

빈 문자열 대신에'NULL'을 사용할 수 있습니까? [MySQL은 고유 색인에'NULL'을 사용하여 여러 행을 허용합니다] (http://dev.mysql.com/doc/refman/5.6/en/create-index.html) –

+0

그러나이 필드는 고유해야합니다. 그들은 식별 번호입니다. – rsb2097

답변

1

이 문제를 "해결하는"가장 확실한 방법은 물론 필드를 고유하지 않게 만드는 것입니다.

하지만 "고유 한 제약 조건을 위반 한 경우 이전 항목을 다른 것으로 업데이트하십시오."와 같은 것을 원할 수도 있습니다.

이 경우에는 both explained here 인 "중복 키 업데이트"또는 "바꾸기"를 사용할 수 있습니다.

+2

INSERT INTO cadastro VALUES (...) 중복 키로 설정 cnpj = null; . 그런 다음 쿼리 할 때 : cadastro ...에서 coalesce (cnpj, '')를 선택하십시오. – ceteras

+0

다른 것으로 업데이트 할 수 없습니다. 새로운 고객을 등록하는 것이 목표이지만 사람들이나 기업 일 수 있으므로 ID 번호에 대해 세 가지 옵션 (사람 2 명과 기업 1 명 (VATIN))이 가능합니다. 나는 몇몇 사람들을 먼저 삽입 할 것이고, 분명히 그들은 VATIN을 갖지 않을 것이다. 비어 있거나 널 (NULL)이어야합니다. NULL은 트릭을 만들었지 만, Java 응용 프로그램이 빈 문자열 (JTextField를 통해 데이터를 삽입 할 때)을 데이터베이스에 NULL 값으로 변환 할 수 있는지 여부는 알 수 없습니다. 가능하면 내 질문에 답을 얻었습니다. :-) – rsb2097

+0

응용 프로그램 논리를 나타내는 여러 필드에 고유 키를 적용하는 것이 좋습니다. –

0

테이블에 UNIQUE 제약이 있습니다 ([cnpj VARCHAR(18)]). UNIQUE 제약은 cnpj 열의 고유성을 보장하므로 동일한 cnpj 값을 갖는 두 개의 레코드를 삽입 할 수 없습니다.