2012-12-02 7 views
25
CREATE TABLE Person(
    PersonId NUM(20), 
    ... 
    ) 

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

Come titolo, devo specificare "not null" per PersonId? O se lo metto a chiave primaria, automaticamente non è nullo di default?È necessario specificare "not null" per la chiave primaria? Oracle/SQL

e.g: 
CREATE TABLE Person(
PersonId NUM(20) NOT NULL, 
... 
+0

si potrebbe facilmente verificare questa te stesso. Potresti anche leggere la documentazione! –

+0

Una chiave primaria deve essere NOT NULL. Non l'ho usato in quasi 10 anni, ma credo che Oracle richieda una dichiarazione esplicita, come la maggior parte degli altri RDBMS fanno la dimostrazione di Nizza –

risposta

26
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   

Quindi, no, non è necessario specificare le colonne della chiave primaria come NOT NULL.

+0

- grazie. –

+0

Questo mostra che questo particolare RDBMS non lo richiede, si scopre che alcuni altri (DB2 e Oracle) fanno e danno un errore per 'col1' sopra. –

+0

Oracle non richiede che le chiavi primarie siano specificate come non null nella dichiarazione della tabella, come ho dimostrato. Supponevo che Oracle fosse il RDBMS in questione, poiché questo è ciò che l'OP ha taggato come domande. – eaolson

2

Nella maggior DBMS, dalla sua una chiave primaria (e la definizione è che esso deve essere univoco all'interno della tabella), allora certamente non può essere nullo.

2

La chiave primaria per definizione non può mai essere Null. Lo scopo della chiave primaria è identificare i record in modo univoco. Una chiave primaria è una combinazione di colonne che specifica in modo univoco una riga.

Un valore null rappresenta la mancanza di valore. Anche se due record hanno NULL nella stessa colonna, i valori della colonna non sono considerati uguali.

6

Sì, come ha detto @eaolson, non è necessario specificare NOT NULL per le colonne della chiave primaria, esse vengono impostate automaticamente su NOT NULL.

Tuttavia, Oracle registra che non è stato specificato NOT NULL esplicitamente nel caso in cui la chiave primaria è disattivata o è sceso in seguito:

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 

Come previsto, col1 è nullable e col2 NOT NULL. Una chiave primaria cambia entrambe le colonne di 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 

Se si disattiva o cadere la chiave primaria, entrambe le colonne ritornano allo stato originale, co1 diventa di nuovo annullabili:

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 
Problemi correlati