2012-05-05 6 views
10

è necessario dichiarare vincoli "NOT NULL" per chiavi primarie nel database MySQL? Una chiave primaria non può avere valori NULL perché comunque auto_incrementi e riempie automaticamente il record del campo. Quindi ho ragione nel dire che posso rimuovere il vincolo "NOT NULL" per le mie chiavi primarie?MySQL - I vincoli "NOT NULL" sono necessari per le chiavi primarie?

+1

Averli sulla colonna _non fa male_ e quando legge la definizione della tabella rende le cose _esplicite_. Se, in futuro, modifichi il vincolo della chiave primaria, avresti comunque il vincolo 'NOT NULL'. – Oded

+4

Hai due concetti intrecciati che non dovresti avere. Una chiave primaria non deve necessariamente essere una colonna autoincrementante, né (se una tabella ne ha una) una colonna autoincrementante deve essere la chiave primaria. Solo perché * tendono * ad essere usati insieme non significa che siano la stessa cosa. –

risposta

11

(Come hai codificato la tua domanda mysql.) In MySQL, non devi farlo esplicitamente. Da the manual:

Un PRIMARY KEY è un indice univoco in cui tutte le colonne chiave devono essere definiti come NOT NULL. Se non vengono dichiarati esplicitamente come NOT NULL, MySQL li dichiara così implicitamente (e silenziosamente).

Naturalmente, solo perché non fare hanno a non significa che potrebbe non voler per chiarezza, ecc

+1

Non solo dichiara le colonne PK come 'NOT NULL', ma sovrascrive le modifiche/le modifica a' NOT NULL' se sono state dichiarate come 'NULL'. –

1

Sì e no è possibile rimuovere "Not Null", che tuttavia non rimuoverà il vincolo. Personalmente li lascerei entrare, non ottieni nulla di utile dal portarli fuori.

+0

No, non puoi. Se una colonna fa parte della chiave primaria, il vincolo Not Null non può essere modificato in null. –

+1

@ypercube Non ha detto "cambia in NULL", ha detto "rimuovi NOT NULL". Solo perché NOT NULL non è nel testo DDL non significa che non sia in vigore. –

+0

@Branko: Se intendeva "rimuovere la dicitura" NOT NULL "dalla definizione", sì, sono d'accordo. Leggendo ancora, hai ragione, probabilmente è questo che intendeva dire. –

0

La chiave primaria non deve includere colonne nullable. auto_increment non è un vincolo di controllo, (è piuttosto un vincolo predefinito), quindi non è possibile rimuovere not null dalla definizione della colonna che fa parte della chiave primaria indipendentemente dalla presenza di auto_increment. Non è necessario digitare not null durante la creazione della tabella per la chiave primaria in mysql, poiché il motore aggiunge automaticamente questo vincolo.

0

Non è necessario dichiarare esplicitamente la colonna come non null poiché il vincolo della chiave primaria rende la colonna NOT NULL. Ho controllato in Oracle.

Problemi correlati