Restrição exclusiva que permite valores vazios no MySQL

125

Eu tenho um campo que armazena códigos de produto. Os códigos são únicos, mas alguns produtos simplesmente não têm um código. Não consigo inventar códigos porque esses são códigos de provedores.

Esse tipo de restrição é possível no MySQL?

Sou um noob com procedimentos armazenados e gatilhos; portanto, se a solução envolver um desses, seja paciente.

Atualização: a coluna NÃO é nula. Por isso não consegui fazer isso.

O Desintegrador
fonte
Possível duplicata do MySQL ignora valores nulos em restrições exclusivas?
Amir Ali Akbari #
@AmirAliAkbari É engraçado como esses dois se vinculam como "possível duplicado". Este é mais velho, no entanto. :)
Pijusn 15/01/19

Respostas:

182

Sim, você pode fazer isso. Veja a referência do MySQL (versão 5.5) .

Um índice UNIQUE cria uma restrição tal que todos os valores no índice devem ser distintos. Ocorre um erro se você tentar adicionar uma nova linha com um valor de chave que corresponda a uma linha existente. Para todos os mecanismos, um índice UNIQUE permite vários valores NULL para colunas que podem conter NULL.

EricC
fonte
8
Obrigado. Eu tenho que fazê-lo nulo
o desintegrador
teve esse problema no modelo django. Torná-lo anulável funciona. Graças
Shrey
13

Sim, se você tornar a coluna do código do produto anulável (não declarada com NOT NULL), a chave exclusiva permitirá várias linhas com NULLos códigos do produto.

caos
fonte
Obrigado. Eu tenho que fazê-lo nulo
o desintegrador
8

O MySQL ainda permite que várias linhas tenham um valor NULLem uma coluna única.

CG.
fonte
Obrigado. Eu tenho que fazê-lo nulo
o desintegrador
@MianAnjum negrito: CREATE TABLE table ( keyint (11) NOT NULL AUTO_INCREMENT, fieldtinyint (1) PADRÃO NULL )
Paul Nowak