Vous pouvez soit utiliser INSERT IGNORE
ou REPLACE
ou INSERT ... ON DUPLICATE KEY UPDATE ...
Chacun nécessite que vous ayez une contrainte unique sur product_id, ip_address
INSÉRER IGNORER
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
ignorera l'insertion, si l'entrée existe déjà.
REMPLACER
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
effectuera une suppression plus une nouvelle insertion.
INSÉRER ... MISE À JOUR
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Essayera d'insérer et si cela échoue, mettre à jour l'enregistrement existant.
Dans votre cas, je pense que vous devriez être d'accord avec INSERT IGNORE
, cependant, si vous souhaitez modifier d'autres valeurs si l'enregistrement existe déjà, INSERT ... UPDATE ...
devrait bien fonctionner.
Je ne recommanderais généralement pas d'utiliser REPLACE
sauf si vous voulez vraiment une DELETE FROM table WHERE ...
plus INSERT INTO TABLE ...
Mettre à jour
Cela nécessite (pour cet exemple) un index unique pour le produit combiné, ip_address. Vous pouvez y parvenir avec
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);