Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL INSERIR EM ONDE NÃO EXISTE


Você pode usar INSERT IGNORE ou REPLACE ou INSERT ... ON DUPLICATE KEY UPDATE ...

Cada um requer que você tenha uma restrição exclusiva em product_id, ip_address

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

irá ignorar a inserção, se a entrada já existir.

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

executará uma exclusão mais uma nova inserção.

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

Tentará inserir e se isso falhar atualizará o registro existente.

No seu caso, acho que você deve estar bem com INSERT IGNORE , no entanto, se você quiser alterar outros valores se o registro já existir, INSERT ... UPDATE ... deve funcionar bem.

Eu geralmente não recomendaria usar REPLACE a menos que você realmente queira um DELETE FROM table WHERE ... mais INSERT INTO TABLE ...

Atualizar

Isso requer (para este exemplo) um índice exclusivo para o produto de combinação, ip_address. Você pode conseguir isso com
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);