Нужно ли указывать "не 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,
...
Ответы
Ответ 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 в одном столбце, значения столбца не считаются равными.