Chave composta MySQL - combinações exclusivas

-1

Suponha que haja uma tabela com as colunas a e b e com a chave exclusiva composta de a,b pair. E há linha a=1, b=2 .

Portanto, não consigo inserir outra linha a=1, b=2 , tudo bem.

Mas como eu poderia negar nessa situação também inserindo a linha a=2, b=1 ?

Por exemplo:

CREATE TABLE 't' ('a' INT, 'b' INT); 
ALTER TABLE 't' ADD UNIQUE('a', 'b'); 
INSERT INTO 't' ('a', 'b') VALUES ('1', '2'); 
INSERT INTO 't' ('a', 'b') VALUES ('2', '1');

A segunda inserção funciona, embora eu espere que falhe.

    
por Alexey 19.01.2017 / 05:22

1 resposta

2

Você não pode com uma definição de chave / índice. De uma perspectiva de DB, os valores de (1,2) e (2,1) serão sempre diferentes.

A solução seria garantir que, por exemplo, a sempre tem o valor mais alto que b ou vice-versa. Você pode garantir isso no aplicativo que adiciona o registro ou como um acionador de banco de dados.

Veja também: Chave de combinação única do MySQL que tem um exemplo de como fazer isso com um gatilho.

    
por 19.01.2017 / 08:03

Tags