다중 열 기본 키의 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
가치.
'필드2' 열은 null일 수 없습니다.
프라이머리 키의 일부인 필드는 null일 수 없기 때문입니까?예를 들어 '0'을 사용하는 것 외에 무엇을 선택할 수 있습니까?NULL
?
MySQL 매뉴얼에서 다음 문서를 참조하십시오.
프라이머리 키
모든 키 열이 NOT NULL로 정의되어야 하는 고유 인덱스입니다. 명시적으로 NOT NULL로 선언되지 않은 경우 MySQL은 암시적으로(그리고 자동으로) 선언합니다.테이블에는 프라이머리 키를 1개만 사용할 수 있습니다.PRIMAY 키의 이름은 항상 PRIMAY이므로 다른 종류의 인덱스의 이름으로 사용할 수 없습니다.
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
필드2가 NULL일 수 있는 경우, 모든 행에서 필드1이 구별되어야 하므로 프라이머리 키의 일부로 필요한 이유에 대해 질문합니다.따라서 Field1만으로도 프라이머리 키로서 충분합니다.Field2에 다른 유형의 인덱스를 생성할 수 있습니다.
기본 키는 열을 고유하고 null이 아닌 것으로 만들기 위해 사용됩니다.
NULL 값을 삽입하려면 field2를 UNIQURE로 합니다.
고유한 제약조건으로 인해 필드는 중복을 제거하지만 null 값은 허용합니다.
기본 키는 열에 포함할 수 없음을 나타냅니다.NULL
가치.따라서 복합 기본 키를 정의하는 데 사용되는 열은NULL
.
또한 Oracle 서버는 복합 기본 키 정의에 사용되는 모든 열의 조합을 비교합니다.기존의 모든 열 데이터(x,y 등)가 새로 추가된 행과 일치하는 경우 고유 제약 조건 위반 오류가 발생합니다.
게다가, 이 실타래를 보세요.복합 기본 키의 nullable 열에 문제가 있습니까?
이 링크는 NULLAB 가능성에 관한 귀중한 정보를 제공합니다.복합 키의 LE 열!
다음과 같은 고유 키를 사용할 수 있습니다.
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)
고유한 키를 사용할 수 있습니다. 이 링크를 확인하십시오. 이 키는 null 값으로 작동합니다.
http://www.xaprb.com/blog/2009/09/12/the-difference-between-a-unique-index-and-primary-key-in-mysql/
언급URL : https://stackoverflow.com/questions/11001333/null-value-in-multi-column-primary-key
'programing' 카테고리의 다른 글
비동기 트랜잭션으로 인해 Ilgal State Exception이 발생함 (0) | 2022.11.05 |
---|---|
InnoDB: redo 로그가 참조하므로 공백 ID가 26146인 데이터 파일 '.catalog_category_product_index_store1.ibd'를 무시합니다. (0) | 2022.11.05 |
변수를 기본값으로 설정하는 최선의 방법(예: Perl ||, |= ) (0) | 2022.11.05 |
타임스탬프부터 일별 그룹화 (0) | 2022.11.05 |
뷰를 사용하여 현재 Laravel 버전을 php로 에코하려면 어떻게 해야 합니까? (0) | 2022.11.05 |