programing

프라이머리 키에 "not null"을 지정해야 합니까?Oracle/SQl

css3 2023. 3. 26. 11:40

프라이머리 키에 "not null"을 지정해야 합니까?Oracle/SQl

CREATE TABLE Person(
    PersonId NUM(20),
    ...
    )

ALTER TABLE Person
ADD(CONSTRAINT personpk PRIMARY KEY(PersonId))

제목으로 PersonId에 "not null"을 지정해야 합니까?또는 프라이머리 키로 설정하면 디폴트로는 null이 되지 않습니다.

e.g: 
CREATE TABLE Person(
PersonId NUM(20) NOT NULL,
...
create table mytable (
  col1 number primary key,
  col2 number,
  col3 number not null
);

table MYTABLE created.

select table_name, column_name, nullable 
from user_tab_cols where table_name = 'MYTABLE';

TABLE_NAME                     COLUMN_NAME                    NULLABLE
------------------------------ ------------------------------ --------
MYTABLE                        COL1                           N        
MYTABLE                        COL2                           Y        
MYTABLE                        COL3                           N        

따라서 기본 키 열을 NOT NULL로 지정할 필요는 없습니다.

네, @eaolson이 말했듯이 프라이머리 키열에는 NOT NULL을 지정할 필요가 없습니다.기본 키열은 자동으로 NOT NULL로 설정됩니다.

그러나 Oracle은 기본 키가 비활성화되거나 나중에 삭제될 경우에 대비하여 명시적으로 NOT NULL을 지정하지 않은 것을 추적합니다.

create table mytable (
  col1 number,
  col2 number not null
);

select table_name, column_name, nullable
  from user_tab_columns where table_name = 'MYTABLE';

TABLE_NAME   COLUMN_NAME  NULLABLE
------------ ------------ ---------
MYTABLE      COL1         Y
MYTABLE      COL2         N

예상대로 col1은 null이고 col2는 NULL이 아닙니다.프라이머리 키는 두 열을 NOT NULL로 변경합니다.

alter table mytable add primary key (col1, col2);

select table_name, column_name, nullable
  from user_tab_columns where table_name = 'MYTABLE';

TABLE_NAME   COLUMN_NAME  NULLABLE
------------ ------------ ---------
MYTABLE      COL1         N
MYTABLE      COL2         N

프라이머리 키를 디세블로 하거나 드롭하면 양쪽 열이 원래 상태로 돌아가 co1이 다시 늘이 됩니다.

alter table mytable disable primary key;

select table_name, column_name, nullable
  from user_tab_columns where table_name = 'MYTABLE';

TABLE_NAME   COLUMN_NAME  NULLABLE
------------ ------------ ---------
MYTABLE      COL1         Y
MYTABLE      COL2         N

정의상 기본 키는 Null일 수 없습니다.주요 목적은 레코드를 고유하게 식별하는 것입니다.기본 키는 행을 고유하게 지정하는 열의 조합입니다.

Null 값은 값이 없음을 나타냅니다.2개의 레코드가 같은 컬럼에 NULL로 되어 있어도 컬럼 값은 동일하지 않습니다.

대부분의 DBMS에서는 프라이머리 키(및 의 정의는 테이블 내에서 고유해야 한다는 의미)이므로 반드시 null일 수 없습니다.

언급URL : https://stackoverflow.com/questions/13665394/do-we-need-to-specify-not-null-for-primary-key-oracle-sql