Du kan antingen använda INSERT IGNORE
eller REPLACE
eller INSERT ... ON DUPLICATE KEY UPDATE ...
Var och en kräver att du har en unik begränsning på produkt-id, ip_adress
INSERT IGNORE
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
ignorerar infogningen om posten redan finns.
ERSÄTT
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
kommer att utföra en radering plus en ny infogning.
INSERT ... UPPDATERING
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Kommer att försöka infoga och om det misslyckas uppdatera den befintliga posten.
I ditt fall tycker jag att du borde klara dig med INSERT IGNORE
, men om du vill ändra andra värden om posten redan finns, INSERT ... UPDATE ...
borde fungera bra.
Jag skulle i allmänhet inte rekommendera att använda REPLACE
om du inte verkligen vill ha en DELETE FROM table WHERE ...
plus INSERT INTO TABLE ...
Uppdatera
Detta kräver (för det här exemplet) ett unikt index för kombinationsprodukten, ip_address. Du kan uppnå detta med
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);