Risposte:
Sì, MySQL consente più NULL in una colonna con un vincolo univoco.
CREATE TABLE table1 (x INT NULL UNIQUE);
INSERT table1 VALUES (1);
INSERT table1 VALUES (1); -- Duplicate entry '1' for key 'x'
INSERT table1 VALUES (NULL);
INSERT table1 VALUES (NULL);
SELECT * FROM table1;
Risultato:
x
NULL
NULL
1
Questo non è vero per tutti i database. SQL Server 2005 e versioni precedenti, ad esempio, consentono solo un singolo valore NULL in una colonna con un vincolo univoco.
WHERE column IS NOT NULL
sembra fallirmi perché non è supportato nella mia versione di MySQL. Qualcuno sa dove potrei guardare?
Dai documenti :
"un indice UNIQUE consente più valori NULL per le colonne che possono contenere NULL"
Questo vale per tutti i motori tranne BDB .
Non sono sicuro se in origine l'autore si stesse solo chiedendo se questo consentisse valori duplicati o se ci fosse una domanda implicita qui che chiedeva "Come consentire NULL
valori duplicati durante l'utilizzo UNIQUE
?" O "Come consentire un solo UNIQUE
NULL
valore?"
Alla domanda è già stata data risposta, sì, è possibile avere NULL
valori duplicati durante l'utilizzo UNIQUE
dell'indice.
Dal momento che mi sono imbattuto in questa risposta durante la ricerca di "come consentire un UNIQUE
NULL
valore". Per chiunque altro possa inciampare in questa domanda mentre fa lo stesso, il resto della mia risposta è per te ...
In MySQL non puoi avere un UNIQUE
NULL
valore, tuttavia puoi avere un UNIQUE
valore vuoto inserendolo con il valore di una stringa vuota.
Avvertenza: valori numerici e tipi diversi da stringa possono essere impostati su 0 o su un altro valore predefinito.
UNIQUE
vincolo ma a causa del NOT NULL
vincolo. Penso che questa risposta sia irrilevante per la domanda perché la domanda riguarda specificamente il comportamento del UNIQUE
vincolo.
Evita vincoli univoci nullable. Puoi sempre inserire la colonna in una nuova tabella, renderla non nulla e univoca e quindi popolare quella tabella solo quando ne hai un valore. Ciò garantisce che qualsiasi dipendenza chiave dalla colonna possa essere applicata correttamente ed evita qualsiasi problema che potrebbe essere causato da null.