Ho una tabella con diverse colonne che costituiscono la chiave primaria. La natura dei dati memorizzati consente ad alcuni di questi campi di avere valori NULL
. Ho progettato il mio tavolo in quanto tale:Valore NULL in chiave primaria a più colonne
CREATE TABLE `test` (
`Field1` SMALLINT(5) UNSIGNED NOT NULL,
`Field2` DECIMAL(5,2) UNSIGNED NULL DEFAULT NULL,
PRIMARY KEY (`Field1`, `Field2`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB;
Tuttavia, quando ho eseguito describe test
lo dimostra in questo modo:
|| *Field* || *Type* || *Null* || *Key* || *Default* || *Extra*
|| Field1 || smallint(5) unsigned || NO || PRI || ||
|| Field2 || decimal(5,2) unsigned || NO || PRI || 0.00 ||
E Continuo a ricevere un errore quando si inserisce un valore NULL
.
colonna 'Campo2' non può essere nullo
È questo a causa di un campo che è parte di una chiave primaria non può essere nulla? Quali sono le mie alternative oltre a usare, diciamo, '0' per NULL
?
Grazie al collegamento vj di Shah, @Tomalak rende il [punto eccellente] (http://stackoverflow.com/a/386061/673991) che questa restrizione Da quanto SQL base principio, dal momento che le parti di una chiave PRIMARIA devono essere confrontate da ogni riga a ogni altra, e "** NULL non può far parte di un confronto - il risultato di tale confronto sarebbe sempre NULL **" che impone l'unicità della chiave PRIMARIA richiede colonne non nulle. –