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 vinculados a outras tabelas.
Quero poder executar INSERT IGNORE
consultas nessa tabela, mas quero usar a combinação de network_id
e network_contact_id
como a chave exclusiva para comparar.
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 precisaria ter um único outro campo com os valores concatenados dos outros dois campos? Ou existe uma maneira de configurar as chaves desta tabela para que ela faça o que eu preciso?
fonte
id
campo como chave primária se esseunique key
item já estiver definido?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 por Bill Karwin sobre as diferenças entre
INSERT IGNORE
,REPLACE
eINSERT ... ON DUPLICATE KEY UPDATE
fonte