two - salvar imagem banco de dados mysql java




Como eu especifico restrição exclusiva para múltiplas colunas no MySQL? (8)

Eu tenho uma mesa:

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

Agora quero fazer com que as colunas usuário, email, endereço sejam únicas (juntas).

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.

Índices exclusivos de múltiplas colunas não funcionam no MySQL se você tiver um valor NULL na linha, já que o MySQL trata NULL como um valor único e pelo menos atualmente não possui lógica para contorná-lo em índices de múltiplas colunas. Sim, o comportamento é insano, porque ele limita um monte de aplicações legítimas de índices multi-coluna, mas é o que é ... Até agora, é um bug que foi carimbado com "não vai consertar" no MySQL trilha de bugs ...


Eu faço assim:

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

Minha convenção para um nome de index_name exclusivo é TableName_Column1_Column2_Column3_uindex .


Isso funciona para a versão 5.5.32 do mysql

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

MySql 5 ou superior se comporta assim (acabei de testar):

  • você pode definir restrições exclusivas envolvendo colunas anuláveis. Digamos que você defina uma restrição única (A, B) onde A não é anulável, mas B é
  • Ao avaliar essa restrição, você pode ter (A, null) quantas vezes quiser (o mesmo valor A!)
  • você só pode ter um par (A, não nulo B)

Exemplo: PRODUCT_NAME, PRODUCT_VERSION "glass", null "glass", null "wine", 1

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


Se você está criando uma tabela no mysql, use 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)
);

Se você quiser evitar duplicatas no futuro. Crie outra coluna, diga id2.

UPDATE tablename SET id2 = id;

Agora adicione o exclusivo em duas colunas:

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

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

Navegue até 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.


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




database-table