nullable 필드에 정의된 MySql 고유 제약 조건은 정확히 어떻게 작동합니까?
데이터베이스(MySql을 사용 중)에 그다지 관심이 없으며 nullable 필드에 설정된 **고유한 제약조건에 대해 다음과 같은 의문이 있습니다.
따라서 내가 아는 바로는 UNIQUIRE 제약조건은 열의 모든 값이 서로 다르다는 것을 보증합니다.
그러나 테이블의 null 가능한 필드에 고유한 제약 조건을 설정하면 어떻게 됩니까?
예를 들어 다음과 같은 DDL 테이블 정의가 있습니다.
CREATE TABLE results (
id BigInt UNSIGNED NOT NULL AUTO_INCREMENT,
sample_id VarChar(128) NOT NULL,
doi VarChar(128),
result VarChar(2) NOT NULL,
error Text,
PRIMARY KEY (
id
)
) ;
ALTER TABLE results COMMENT = '';
ALTER TABLE results ADD CONSTRAINT fk_results_pgrfas FOREIGN KEY (sample_id)
REFERENCES pgrfas (sample_id)
ON DELETE NO ACTION
ON UPDATE NO ACTION;
ALTER TABLE results ADD CONSTRAINT u_results UNIQUE
(doi);
여기서 doi 필드는 null입니다.이 필드에서는 이 테이블의 행이 doi 필드의 동일한 값을 갖는 것을 방지하기 위해 고유한 제약 조건이 설정됩니다.
행마다 doi 값이 달라야 하는데 이 필드는 null일 수 있으므로 여러 행에 doi 필드를 null로 설정해야 합니다.
고유한 제약조건은 설정된 값에서만 작동하거나 다른 행에 이 doi 필드의 null 값이 있는 것을 방지합니까?(유일한 제약조건이 null 값이 아닌 경우에만 기능해야 하기 때문에 문제가 됩니다).
doi 필드가 null로 설정된 행을 여러 개 삽입할 수 있습니까?
정답은 문서 깊숙이 숨어 있습니다.create index
:
A
UNIQUE
index는 인덱스의 모든 값이 구별되어야 하는 구속조건을 만듭니다.기존 행과 일치하는 키 값을 사용하여 새 행을 추가하려고 하면 오류가 발생합니다.모든 엔진에 대해 인덱스는 를 포함할 수 있는 열에 여러 값을 허용합니다.
이 동작은 데이터베이스에 따라 다릅니다.1개만 허용하는 경우도 있습니다.NULL
가치.
고객님의 목적을 위해unique
인덱스/제약은 필요한 기능을 수행합니다.
언급URL : https://stackoverflow.com/questions/42855821/how-exactly-works-the-mysql-unique-constraint-defined-on-a-nullable-field
'programing' 카테고리의 다른 글
Larabel 5.2에서 전화번호를 확인하는 방법 (0) | 2022.09.09 |
---|---|
다른 파일에서 변수를 가져오시겠습니까? (0) | 2022.09.09 |
PHPUnit을 사용하여 보호된 메서드를 테스트하는 모범 사례 (0) | 2022.09.09 |
동일한 워크북의 여러 워크시트에 대해 pd.read_excel()에 Panda 사용 (0) | 2022.09.09 |
Lombok은 getter와 setter를 생성하지 않습니다. (0) | 2022.09.09 |