Dê uma olhada no seguinte sqlfiddle: http://sqlfiddle.com/#!2/dacb5/1
CREATE TABLE contacts
(
id int auto_increment primary key,
name varchar(20),
network_id int,
network_contact_id int
);
INSERT INTO contacts
(name, network_id, network_contact_id)
VALUES
('John', 4, 10),
('Alex', 4, 11),
('Bob', 4, 12),
('Jeff', 4, 45),
('Bill', 7, 11),
('Walter', 7, 45),
('Jessie', 7, 360) ;
Eu tenho uma tabela básica de contatos. Os campos network_id
e network_contact_id
contêm números de identificação que se vinculam a outras tabelas.
Quero ser capaz de executar INSERT IGNORE
consultas nessa tabela, mas quero usar a combinação de network_id
e network_contact_id
como a chave exclusiva para fazer a correspondência.
Por exemplo, se eu tentasse inserir um contato que tivesse network_id = 4
e network_contact_id = 12
, a INSERT IGNORE
consulta veria que a entrada já existe e ignoraria qualquer erro que fosse lançado.
Então, basicamente, network_id
não é único. network_contact_id
não é único. Mas a combinação dos dois é única. Como faço para configurar isso? Eu teria que ter um único outro campo que fosse os valores concatenados dos dois outros campos? Ou existe uma maneira de configurar as chaves para esta tabela para que ela faça o que eu preciso?
Você tentou
Altere a definição da tabela adicionando uma
UNIQUE KEY
restrição na combinação das duas colunas:Você também deve verificar esta resposta de Bill Karwin sobre as diferenças entre
INSERT IGNORE
eREPLACE
INSERT ... ON DUPLICATE KEY UPDATE