Puedes usar INSERT IGNORE
o REPLACE
o INSERT ... ON DUPLICATE KEY UPDATE ...
Cada uno requiere que tenga una restricción única en product_id, ip_address
INSERTAR IGNORAR
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
ignorará la inserción, si la entrada ya existe.
REEMPLAZAR
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
realizará una eliminación más una nueva inserción.
INSERTAR... ACTUALIZAR
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Intentará insertar y, si falla, actualizar el registro existente.
En tu caso, creo que deberías estar bien con INSERT IGNORE
, sin embargo, si desea cambiar otros valores si el registro ya existe, INSERT ... UPDATE ...
debería funcionar bien.
Por lo general, no recomendaría usar REPLACE
a menos que realmente desee un DELETE FROM table WHERE ...
más INSERT INTO TABLE ...
Actualizar
Esto requiere (para este ejemplo) un índice único para el producto combinado, ip_address. Puede lograrlo con
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);