49
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,
...
4

4 に答える 4

51
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        

したがって、いいえ、主キー列をNOTNULLとして指定する必要はありません。

于 2012-12-02T01:02:41.743 に答える
21

はい、@ eaolsonが言ったように、主キー列にNOTNULLを指定する必要はありません。それらは自動的にNOTNULLに設定されます。

ただし、Oracleは、主キーが無効になったり、後で削除されたりした場合に備えて、NOTNULLを明示的に指定しなかったことを追跡します。

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ではありません。主キーは両方の列をNOTNULLに変更します。

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は再びnull許容になります。

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
于 2012-12-02T15:07:57.793 に答える
3

定義上、主キーを Null にすることはできません。主キーの目的は、レコードを一意に識別することです。主キーは、行を一意に指定する列の組み合わせです。

Null 値は、値がないことを表します。2 つのレコードが同じ列に NULL を持っていても、列の値は等しいとは見なされません。

于 2012-12-02T01:14:08.503 に答える
2

ほとんどのDBMSでは、その主キー(および、テーブル内で一意である必要があるという定義)であるため、nullにすることはできません。

于 2012-12-02T01:00:13.687 に答える