Du kan enten bruge INSERT IGNORE
eller REPLACE
eller INSERT ... ON DUPLICATE KEY UPDATE ...
Hver af dem kræver, at du har en unik begrænsning på product_id, ip_address
INDSÆT IGNORER
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
vil ignorere indsættelsen, hvis indtastningen allerede eksisterer.
UDSKIFT
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
vil udføre en sletning plus en ny indsættelse.
INDSÆT ... OPDATERING
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Vil prøve at indsætte, og hvis det mislykkes, opdatere den eksisterende post.
I dit tilfælde synes jeg, du skal have det fint med INSERT IGNORE
, men hvis du ønsker at ændre andre værdier, hvis posten allerede eksisterer, INSERT ... UPDATE ...
burde fungere godt.
Jeg vil generelt ikke anbefale at bruge REPLACE
medmindre du virkelig ønsker en DELETE FROM table WHERE ...
plus INSERT INTO TABLE ...
Opdater
Dette kræver (for dette eksempel) et unikt indeks for kombinationsproduktet, ip_address. Du kan opnå dette med
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);