Подтвердить что ты не робот

Нужно ли указывать "не null" для первичного ключа? Oracle/SQL

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

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

Как заголовок, мне нужно указать "не null" для PersonId? Или, если я устанавливаю его на первичный ключ, он по умолчанию не равен null?

e.g: 
CREATE TABLE Person(
PersonId NUM(20) NOT NULL,
...
4b9b3361

Ответ 1

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.

Ответ 2

Да, как сказал @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 NOT 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

Ответ 3

В большинстве СУБД, поскольку его первичный ключ (и определение состоит в том, что он должен быть уникальным в таблице), то он, безусловно, не может быть нулевым.

Ответ 4

Первичный ключ по определению никогда не может быть нулевым. Основная цель - уникальная идентификация записей. Первичный ключ представляет собой комбинацию столбцов, которые однозначно указывают строку.

Значение Null означает отсутствие значения. Даже если две записи имеют NULL в одном столбце, значения столбца не считаются равными.