programing

다중 열 기본 키의 NULL 값

javaba 2022. 11. 5. 11:18
반응형

다중 열 기본 키의 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

반응형