Eu tenho uma mesa:
table votes (
id,
user,
email,
address,
primary key(id),
);
Agora, quero tornar as colunas usuário, email e endereço exclusivos (juntos).
Como faço isso no MySql?
Claro que o exemplo é apenas ... um exemplo. Então, por favor, não se preocupe com a semântica.
Eu tenho uma tabela MySQL:
e a UNIQUE KEY funciona da maneira esperada, permitindo várias linhas NULL de id_box_elements e id_router.
Estou executando o MySQL 5.1.42, então provavelmente houve alguma atualização sobre o problema discutido acima. Felizmente, funciona e espero que continue assim.
fonte
Os índices exclusivos de várias colunas não funcionam no MySQL se você tiver um valor NULL em linha, pois o MySQL trata NULL como um valor exclusivo e, pelo menos atualmente, não tem lógica para contorná-lo em índices de várias colunas. Sim, o comportamento é insano, porque limita muitas aplicações legítimas de índices de várias colunas, mas é o que é ... Até agora, é um bug que foi carimbado com "não será corrigido" no MySQL rastrear insetos ...
fonte
ENGINE BDB
e, 2) esse é um comportamento documentado , embora IMHO não tenha sido suficientemente documentado, dado o quão surpreendente / desagradável pode ser. Veja o bug 25544 do MySQL bugs.mysql.com/bug.php?id=25544 para uma discussão.Você já tentou isso?
fonte
UNIQUE KEY
thekey` (user
,email
,address
) `. Estou usando o MYSQL versão 5.5.24. Você pode definir isso mesmo no PHPMYADMIN se estiver usando. Estou usando a versão 3.5.1 do PMA.Isso funciona para o mysql versão 5.5.32
fonte
O MySql 5 ou superior se comporta assim (eu acabei de testar):
Exemplo: PRODUCT_NAME, PRODUCT_VERSION 'copo', nulo 'copo', nulo 'vinho', 1
Agora, se você tentar inserir ('wine' 1) novamente, ele relatará uma violação de restrição Espero que isso ajude
fonte
Você pode adicionar índices exclusivos de várias colunas via phpMyAdmin . (Eu testei na versão 4.0.4)
Navegue para a página de estrutura da sua tabela de destino. Adicione um índice exclusivo a uma das colunas. Expanda a lista Índices na parte inferior da página da estrutura para ver o índice exclusivo que você acabou de adicionar. Clique no ícone de edição e, na caixa de diálogo a seguir, você pode adicionar colunas adicionais a esse índice exclusivo.
fonte
Eu faço assim:
Minha convenção para um único
index_name
éTableName_Column1_Column2_Column3_uindex
.fonte
Para adicionar um índice exclusivo, é necessário o seguinte:
1) table_name
2) index_name
3) colunas nas quais você deseja adicionar índice
No seu caso, podemos criar um índice exclusivo da seguinte maneira:
fonte
Se você deseja evitar duplicatas no futuro. Crie outra coluna, diga id2.
Agora adicione o exclusivo em duas colunas:
fonte
Se você estiver criando tabela no mysql, use o seguinte:
fonte
Primeiro, livre-se das duplicatas existentes
Em seguida, adicione a restrição exclusiva
Verifique a restrição com
Observe que o usuário, email, endereço será considerado único se algum deles tiver valor nulo.
fonte
Para PostgreSQL ... Não funcionou para mim com índice; isso me deu um erro, então eu fiz isso:
O PostgreSQL deu ao índice exclusivo seu próprio nome. Eu acho que você pode alterar o nome do índice nas opções da tabela, se for necessário alterar ...
fonte