Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL INSERT IN WO NICHT VORHANDEN

Sie können entweder INSERT IGNORE verwenden oder REPLACE oder INSERT ... ON DUPLICATE KEY UPDATE ...

Jedes erfordert, dass Sie eine eindeutige Einschränkung für product_id, ip_address haben

IGNORIEREN EINFÜGEN

INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')

ignoriert das Einfügen, wenn der Eintrag bereits existiert.

ERSETZEN

REPLACE INTO products VALUES (null, 111, '8.8.8.8')

führt eine Löschung plus eine neue Einfügung durch.

EINFÜGEN ... AKTUALISIEREN

INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()

Wird versuchen, den vorhandenen Datensatz einzufügen, und falls dies fehlschlägt, den vorhandenen Datensatz zu aktualisieren.

In Ihrem Fall sollten Sie mit INSERT IGNORE zufrieden sein Wenn Sie jedoch andere Werte ändern möchten, wenn der Datensatz bereits vorhanden ist, INSERT ... UPDATE ... sollte gut funktionieren.

Ich würde generell nicht empfehlen, REPLACE zu verwenden es sei denn, Sie möchten wirklich eine DELETE FROM table WHERE ... plus INSERT INTO TABLE ...

Aktualisieren

Dies erfordert (für dieses Beispiel) einen eindeutigen Index für das Kombinationsprodukt ip_address. Dies erreichen Sie mit

ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);