Tak, jak powiedział @eaolson, nie trzeba podawać NOT NULL dla kolumn klucza podstawowego, są one ustawiane automatycznie na NOT NULL.
Jednak Oracle śledzi, że nie określił wyraźnie NOT NULL w przypadku, gdy klucz podstawowy jest wyłączona lub później spadł na:
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
Zgodnie z oczekiwaniami, col1 jest pustych i col2 NOT NULL. Klucz podstawowy zmienia obie kolumny 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
Jeśli wyłączyć lub usunąć klucz podstawowy, obie kolumny przywrócić do stanu pierwotnego, CO1 staje się ponownie pustych:
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
można łatwo to sprawdzić siebie. Możesz nawet przeczytać dokumentację! –
Klucz podstawowy jest wymagany, aby NIE mieć wartości NULL. Nie używałem tego od prawie 10 lat, ale wierzę, że Oracle wymaga wyraźnej deklaracji, ponieważ większość innych RDBMS robi –