집 >데이터 베이스 >MySQL 튜토리얼 >MySQL의 고유 제약 조건 및 NULL에 대한 자세한 설명
여기에 기록된 내용은 오래 전에 발생한 버그로, MySQL 제약 조건 및 NULL에 대한 정보를 주로 소개합니다. >. 기사에서 소개는 매우 자세하며 모든 사람을 위한 특정 참고 자료와 학습 가치가 있습니다. 필요한 친구는 아래를 살펴볼 수 있습니다.
서문
이전에 만든 요구 사항으로, 간단히 설명하면 다른 그룹의 MQ 메시지를 수락한 다음 레코드를 삽입하는 것입니다. 데이터베이스 . 반복적인 메시지 전송과 다수의 중복 레코드 삽입을 방지하기 위해 테이블의 여러 열에 고유한인덱스를 추가했습니다.
CREATE UNIQUE INDEX IDX_UN_LOAN_PLAN_APP ON testTable (A, B, C);이때 A, B, C 세 컬럼은 NULL 값을 허용하지 않으며 고유성 제약 조건도 작동합니다.
ALTER TABLE testTable DROP INDEX IDX_UN_LOAN_PLAN_APP, ADD UNIQUE KEY `IDX_UN_LOAN_PLAN_APP` (A, B, C, D);새로 추가된 D는
datetime 유형이며 NULL이 허용되며 기본값은 NULL입니다. 기본값이 NULL인 이유는 모든 레코드에 이 시간이 없기 때문입니다. 강제로 Magic Value(예: '1970-01-01 08:00:00')를 기본값으로 설정하면 이상하게 보입니다.
블루퀸. . . 문제가 발생했습니다. D를 추가한 후에는 고유성 제약 조건이 기본적으로 유효하지 않습니다.Insert into testTable (A,B,C,D) VALUES (1,2,3,NULL); --- OK Insert into testTable (A,B,C,D) VALUES (1,2,3,NULL); --- OK Insert into testTable (A,B,C,D) VALUES (1,2,3,NULL); --- OK위의 세 가지 SQL은 모두 성공적으로 실행될 수 있으며 데이터베이스에 동일한 레코드가 여러 개 있을 것입니다. 이전 아이디어에 따르면 마지막 두 SQL을 실행할 때 '중복 키' 예외가 발생해야 합니다. 확인해 보니 공식 MySQL 문서에 이렇게 명시되어 있는 것을 알 수 있었습니다. 고유 인덱스를 사용하면 여러 개의 NULL 값이 존재할 수 있습니다.
A UNIQUE index creates a constraint such that all values in the index must be distinct. An error occurs if you try to add a new row with a key value that matches an existing row. For all engines, a UNIQUE index allows multiple NULL values for columns that can contain NULL.아래 표를 보면 알 수 있습니다. 어떤 유형의 스토리지 엔진을 사용하든 고유 키를 생성할 때 여러 개의 NULL이 존재할 수 있습니다. . . .
많은 사람들이 MySQL 공식 웹사이트에서 이 문제에 대해 논의했습니다. 어떤 사람들은 이것이 MySQL의 버그라고 생각하는 반면 다른 사람들은 그것이 기능이라고 생각합니다.
MySQL 버그: #8173: 고유 인덱스는 null 값을 사용한 중복을 허용합니다 요약위 내용은 MySQL의 고유 제약 조건 및 NULL에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!