Puoi utilizzare INSERT IGNORE
o REPLACE
o INSERT ... ON DUPLICATE KEY UPDATE ...
Ciascuno richiede che tu abbia un vincolo univoco su product_id, ip_address
INSERIRE IGNORA
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
ignorerà l'inserimento, se la voce esiste già.
SOSTITUIRE
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
eseguirà un'eliminazione più un nuovo inserimento.
INSERIRE... AGGIORNA
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Proverò a inserirlo e, in caso contrario, aggiornerà il record esistente.
Nel tuo caso penso che dovresti andare bene con INSERT IGNORE
, tuttavia se vuoi modificare altri valori se il record esiste già, INSERT ... UPDATE ...
dovrebbe funzionare bene.
In genere non consiglierei di usare REPLACE
a meno che tu non voglia davvero un DELETE FROM table WHERE ...
più INSERT INTO TABLE ...
Aggiorna
Ciò richiede (per questo esempio) un indice univoco per il prodotto combinato, indirizzo_ip. Puoi ottenerlo con
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);