Respostas:
Sim, o MySQL permite vários NULLs em uma coluna com uma restrição única.
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;
Resultado:
x
NULL
NULL
1
Isso não é verdade para todos os bancos de dados. O SQL Server 2005 e mais antigo, por exemplo, permite apenas um único valor NULL em uma coluna que possui uma restrição exclusiva.
WHERE column IS NOT NULLparece falhar comigo, pois não é suportado na minha versão do MySQL. Alguém sabe onde eu poderia procurar?
Dos documentos :
"um índice UNIQUE permite vários valores NULL para colunas que podem conter NULL"
Isso se aplica a todos os mecanismos, exceto o BDB .
Não tenho certeza se o autor originalmente estava apenas perguntando se isso permite ou não valores duplicados ou se havia uma pergunta implícita aqui perguntando: "Como permitir NULLvalores duplicados durante o uso UNIQUE?" Ou "Como permitir apenas umUNIQUE NULL valor?"
A pergunta já foi respondida; sim, você pode ter NULLvalores duplicados enquanto usa o UNIQUEíndice.
Desde que me deparei com essa resposta enquanto procurava por "como permitir um UNIQUE NULLvalor". Para quem mais se deparar com essa pergunta enquanto faz o mesmo, o restante da minha resposta é para você ...
No MySQL, você não pode ter um UNIQUE NULLvalor, no entanto, pode ter um UNIQUEvalor vazio, inserindo o valor de uma string vazia.
Aviso: Numérico e tipos diferentes de sequência podem ter como padrão 0 ou outro valor padrão.
UNIQUErestrição, mas por causa da NOT NULLrestrição. Eu acho que essa resposta é irrelevante para a pergunta, porque a pergunta é especificamente sobre o comportamento da UNIQUErestrição.
Evite restrições exclusivas anuláveis. Você sempre pode colocar a coluna em uma nova tabela, torná-la não nula e exclusiva e, em seguida, preencher essa tabela somente quando tiver um valor para ela. Isso garante que qualquer dependência de chave na coluna possa ser aplicada corretamente e evita problemas que possam ser causados por nulos.