2011-03-25 15 views
8

SQL Server 2008/2005La chiave primaria SQL può accettare "0"?

Sono confuso tra chiave primaria e chiave unica.

Sono consapevole che la chiave primaria non consentirà NULL, mentre Unique accetterà NULL. Inoltre, una tabella può avere un numero "n" di chiavi uniche ..!

Se la chiave primaria consente Zero?

+0

solo un commento informativo. questa domanda è applicabile anche a 'mySql' – dhpratik

risposta

14

Chiave primaria Può essere zero, ma se si imposta Identità sulla colonna, normalmente inizierà a 1 anziché a zero.

+0

con la colonna Identity .. (Molto probabilmente o Most Scenario) .. Quindi, posso supporre che, se c'è una colonna Identity, possiamo avviare il seed/incremento di 0. Per iniziare con Zero invece di 1, come farlo? – goofyui

+0

Perché si desidera avviare comunque l'incremento a zero? Ma sì, avvia il seme a zero e poi incrementa di uno, quindi sarebbe IDENTITÀ (0,1) –

+0

Ho testato lo scenario ..! Se non c'è identità .., la chiave primaria consentirà Zero ..! – goofyui

3

Sì. NULL è l'assenza di un valore. 0 è un valore.

+0

La chiave primaria suppende ZERO? – goofyui

+0

Sì. La chiave primaria supporta la chiave primaria ZERO – climbage

7

Una chiave primaria può consentire 0 a seconda del tipo di dati della chiave primaria. Un PK (Identity) autogenerato può iniziare da 0 ma non è il comportamento predefinito, dovrai impostarlo per iniziare da 0 (diamine puoi iniziare con numeri negativi se lo desideri). Per ottenere i migliori risultati, questo dovrebbe essere fatto prima di iniziare a inserire i dati nella tabella.

Quello che non si può fare è avere più record con uno 0 come PK in quanto viola il requisito di unicità del PK.

Se si dispone di dati esistenti e si desidera un record con valore zero per uno scopo specifico (ad esempio, si inserisce un utente per il processo di importazione, quindi il campo inseritoby potrebbe indicare che il record proviene da un'importazione) , quindi quello che probabilmente vuoi è consentire un inserimento manuale nel campo identità, così puoi inserire questo record specifico al valore che vuoi, quindi tornare alle solite impostazioni. Questo viene fatto in questo modo:

set Identity_insert dbo.table1 ON 
insert dbo.table1 (id, myfield) 
Values (0, 'test') 
set Identity_insert dbo.table1 OFF 

Non fare questo nel codice di produzione delle applicazioni, questo è un tipo di sistema di amministrazione del compito che dovrebbe essere fatto solo occasionalmente sia per l'impostazione di un record particolare al di fuori del campo di applicazione della normale dati o per inserire record trasferiti da un'altra fonte (quando si conoscono i loro valori di identificazione esistenti sono attualmente inutilizzati). Questo non dovrebbe essere leggermente usato per aggirare le restrizioni di un campo di identità. In particolare, non dovrebbe mai essere utilizzato per compilare record in cui l'identità è saltata (a causa di una cancellazione o rollback) poiché ciò vanifica lo scopo dell'utilizzo di un'identità e può causare problemi di integrità dei dati se non sono state stabilite le corrette relazioni PK/FK.

+0

Grazie per la spiegazione dettagliata e dettagliata, anche questa è l'unica risposta per mostrare COME fare ciò che l'OP chiedeva, spiegando PERCHE 'di non farlo. Brillante! – Rustavore

Problemi correlati