Pergunta

Eu tenho uma tabela:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

Agora eu quero tornar as colunas usuário, e-mail, endereço único (em conjunto).

Como posso fazer isso no MySql?

  • É claro que o exemplo é apenas ... um exemplo. Então, por favor não se preocupe com a semântica.
Foi útil?

Solução

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

Outras dicas

Eu tenho uma tabela MySQL:

CREATE TABLE `content_html` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_box_elements` int(11) DEFAULT NULL,
  `id_router` int(11) DEFAULT NULL,
  `content` mediumtext COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);

eo UNIQUE KEY funciona apenas como esperado, ele permite que várias linhas nula de id_box_elements e id_router.

Estou executando o MySQL 5.1.42, então provavelmente houve alguma atualização sobre o tema discutido acima. Felizmente ele funciona e espero que continue assim.

coluna multi índices únicos não funcionam no MySQL se você tiver um valor NULL em linha como MySQL trata NULL como um valor único e, pelo menos atualmente não tem lógica para trabalhar em torno dele em índices com várias colunas. Sim, o comportamento é uma loucura, porque limita um monte de aplicativos legítimos de índices com várias colunas, mas é o que é ... Até o momento, é um erro que foi carimbado com "não vai resolver" no MySQL bug-track ...

Você já tentou isso?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

Isso funciona para a versão mysql 5.5.32

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

Você pode adicionar de múltiplas colunas índices únicos via phpMyAdmin . (Eu testei na versão 4.0.4)

Vá até o Estrutura para sua tabela de destino. Adicionar um índice exclusivo para uma das colunas. Expanda a lista Índices na parte inferior da página estrutura para ver o índice exclusivo que você acabou de adicionar. Clique no ícone de edição, e no diálogo, você pode adicionar colunas adicionais para que o índice exclusivo.

MySql 5 ou se comporta mais elevados como este (eu apenas testado):

  • Você pode definir restrições exclusivas que envolvem colunas anuláveis. Digamos que você definir uma restrição exclusiva (A, B), onde A não é anulável, mas B é
  • quando se avalia essa restrição uma você pode ter (A, null) quantas vezes você quer (mesmo valor A!)
  • Você pode ter apenas um (A, não nulo B) par

Exemplo: PRODUCT_NAME, PRODUCT_VERSION 'Copo', null 'Copo', null 'Vinho', 1

Agora, se você tentar inserir ( 'vinho' 1) novamente ele irá informar uma violação de restrição Espero que isso ajude

Eu faço isso como este:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

Meu convenção para uma index_name único é TableName_Column1_Column2_Column3_uindex.

Se você quer evitar duplicatas no futuro. Crie outra ID2 coluna digamos.

UPDATE tablename SET id2 = id;

Agora adicione a única em duas colunas:

alter table tablename add unique index(columnname, id2);

Para adicionar única seguinte índice são necessários:

1) table_name
2) index_name
3) colunas em que você deseja adicionar índice

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

No seu caso, podemos criar índice exclusivo da seguinte forma:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

Se você estiver criando a tabela no mysql usar, então seguinte:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top