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.



@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.


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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.