Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL INSÉRER DANS OÙ N'EXISTE PAS

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);