是的,正如@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可爲空和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
你可以很容易檢驗這個你自己。你甚至可以閱讀文檔! –
主鍵必須是NOT NULL。在近10年內沒有使用它,但我相信Oracle需要明確的聲明,因爲大多數其他RDBMS可以做 –