Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL INSERT IN DOVE NON ESISTE

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