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 NULL
parece 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 NULL
valores duplicados durante o uso UNIQUE
?" Ou "Como permitir apenas umUNIQUE
NULL
valor?"
A pergunta já foi respondida; sim, você pode ter NULL
valores duplicados enquanto usa o UNIQUE
índice.
Desde que me deparei com essa resposta enquanto procurava por "como permitir um UNIQUE
NULL
valor". 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
NULL
valor, no entanto, pode ter um UNIQUE
valor 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.
UNIQUE
restrição, mas por causa da NOT NULL
restrição. Eu acho que essa resposta é irrelevante para a pergunta, porque a pergunta é especificamente sobre o comportamento da UNIQUE
restriçã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.