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.
solo un commento informativo. questa domanda è applicabile anche a 'mySql' – dhpratik