sql >> Base de Datos >  >> RDS >> Mysql

MySQL INSERTAR EN DONDE NO EXISTE

Puedes usar INSERT IGNORE o REPLACE o INSERT ... ON DUPLICATE KEY UPDATE ...

Cada uno requiere que tenga una restricción única en product_id, ip_address

INSERTAR IGNORAR

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

ignorará la inserción, si la entrada ya existe.

REEMPLAZAR

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

realizará una eliminación más una nueva inserción.

INSERTAR... ACTUALIZAR

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

Intentará insertar y, si falla, actualizar el registro existente.

En tu caso, creo que deberías estar bien con INSERT IGNORE , sin embargo, si desea cambiar otros valores si el registro ya existe, INSERT ... UPDATE ... debería funcionar bien.

Por lo general, no recomendaría usar REPLACE a menos que realmente desee un DELETE FROM table WHERE ... más INSERT INTO TABLE ...

Actualizar

Esto requiere (para este ejemplo) un índice único para el producto combinado, ip_address. Puede lograrlo con

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