Eche un vistazo al siguiente 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) ;
Tengo una tabla básica de contactos. Los campos network_id
y network_contact_id
contienen números de identificación que enlazan con otras tablas.
Quiero poder ejecutar INSERT IGNORE
consultas en esta tabla, pero quiero usar la combinación de network_id
y network_contact_id
como la clave única para comparar.
Entonces, por ejemplo, si intenté insertar un contacto que tenía network_id = 4
y network_contact_id = 12
, la INSERT IGNORE
consulta vería que esa entrada ya existe e ignoraría cualquier error que se haya lanzado.
Entonces, básicamente, network_id
no es único. network_contact_id
No es único. Pero la combinación de los dos es única. ¿Cómo configuro esto? ¿Tendría que tener otro único campo que sean los valores concatenados de los otros dos campos? ¿O hay una manera de configurar las teclas para esta tabla para que haga lo que necesito?
fuente
id
campo como clave principal si estaunique key
cosa ahora está configurada?Cambie la definición de la tabla agregando una
UNIQUE KEY
restricción en la combinación de las dos columnas:También debe comprobar esta respuesta por Bill Karwin en las diferencias entre
INSERT IGNORE
,REPLACE
yINSERT ... ON DUPLICATE KEY UPDATE
fuente