two - salvar imagem banco de dados mysql java




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

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

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