다중 열 기본 키의 NULL 값
기본 키를 구성하는 여러 열이 있는 테이블이 있습니다. 저장된 데이터의 특성으로 인해 이러한 필드 중 일부는 NULL
값 을 가질 수 있습니다. 나는 내 테이블을 다음과 같이 디자인했습니다.
CREATE TABLE `test` (
`Field1` SMALLINT(5) UNSIGNED NOT NULL,
`Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`Field1`, `Field2`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
그러나 실행 describe test
하면 다음과 같이 표시됩니다.
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra*
|| Field1 || smallint(5) unsigned || NO || PRI || ||
|| Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
그리고 NULL
값을 삽입할 때 계속 오류가 발생 합니다.
'Field2' 열은 null일 수 없습니다.
기본 키의 일부인 필드가 null일 수 없기 때문입니까? 예를 들어 '0'을 사용하는 것 외에 대안은 무엇입니까 NULL
?
MySQL 문서에서 :
PRIMARY KEY는 모든 키 열이 NOT NULL로 정의되어야 하는 고유 인덱스입니다.
명시적으로 NOT NULL로 선언되지 않은 경우 MySQL은 이를 암시적으로(그리고 자동으로) 선언합니다. 테이블에는 하나의 PRIMARY KEY만 있을 수 있습니다. PRIMARY KEY의 이름은 항상 PRIMARY이므로 다른 종류의 인덱스 이름으로 사용할 수 없습니다.
http://dev.mysql.com/doc/refman/5.1/en/create-table.html
Field2가 NULL일 수 있는 경우 Field1이 모든 행에서 구별되어야 하기 때문에 기본 키의 일부로 이를 필요로 하는 이유가 무엇인지 궁금합니다. 따라서 Field1 자체가 기본 키로 충분해야 합니다. Field2에 다른 유형의 인덱스를 만들 수 있습니다.
기본 키는 열을 고유하고 null이 아닌 것으로 만드는 데 사용됩니다.
null 값을 삽입하려면 field2를 고유 하게 만듭니다.
고유 제약 조건은 필드에서 중복을 제거하지만 null 값을 허용 합니다.
기본 키는 열에 NULL
값이 없어야 함을 나타냅니다 . 따라서 복합 기본 키를 정의하는 데 사용되는 열은 NULL
.
또한 Oracle 서버는 복합 기본 키 정의에 사용된 모든 열의 조합을 비교합니다. 모든 열의 기존 데이터(예: x,y)가 새로 추가된 행과 일치하면 Unique Constraint Violated 오류가 발생합니다.
게다가, 이 스레드를 보세요. 복합 기본 키의 nullable 열에 무슨 문제가 있습니까? .
이 링크는 복합 키에서 NULLABLE 열의 가능성에 대한 귀중한 정보를 제공합니다!
고유 키를 사용할 수 있습니다. 이 링크를 살펴보세요. null 값으로 작동합니다.
http://www.xaprb.com/blog/2009/09/12/the-difference-between-a-unique-index-and-primary-key-in-mysql/
다음과 같이 고유 키를 사용할 수 있습니다.
mysql> CREATE TABLE `test` (
-> `Field1` SMALLINT(5) UNSIGNED NOT NULL,
-> `Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
-> UNIQUE KEY (`Field1`, `Field2`)
-> )
-> COLLATE='latin1_swedish_ci'
-> ENGINE=InnoDB;
Query OK, 0 rows affected (0.03 sec)
mysql>
mysql> desc test
-> ;
+--------+-----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-----------------------+------+-----+---------+-------+
| Field1 | smallint(5) unsigned | NO | MUL | NULL | |
| Field2 | decimal(5,2) unsigned | YES | | NULL | |
+--------+-----------------------+------+-----+---------+-------+
2 rows in set (0.01 sec)
ReferenceURL : https://stackoverflow.com/questions/11001333/null-value-in-multi-column-primary-key
'IT이야기' 카테고리의 다른 글
Scala에서 케이스 클래스를 튜플로 변환하는 쉬운 방법 (0) | 2021.09.26 |
---|---|
sessionStorage 및 localStorage 저장 장소 (0) | 2021.09.26 |
SQL Azure에서 데이터베이스 간에 쿼리할 수 없음 (0) | 2021.09.26 |
Selenium WebDriver를 사용하여 JavaScript 변수 읽기 (0) | 2021.09.26 |
파이썬의 정규식 일치에서 문자열을 반환 (0) | 2021.09.26 |