Você pode usar
INSERT IGNORE
ou REPLACE
ou INSERT ... ON DUPLICATE KEY UPDATE ...
Cada um requer que você tenha uma restrição exclusiva em product_id, ip_address
INSERIR IGNORAR
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
irá ignorar a inserção, se a entrada já existir.
TROCAR
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
executará uma exclusão mais uma nova inserção.
INSERIR... ATUALIZAR
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Tentará inserir e se isso falhar atualizará o registro existente.
No seu caso, acho que você deve estar bem com
INSERT IGNORE
, no entanto, se você quiser alterar outros valores se o registro já existir, INSERT ... UPDATE ...
deve funcionar bem. Eu geralmente não recomendaria usar
REPLACE
a menos que você realmente queira um DELETE FROM table WHERE ...
mais INSERT INTO TABLE ...
Atualizar
Isso requer (para este exemplo) um índice exclusivo para o produto de combinação, ip_address. Você pode conseguir isso com
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);