Możesz użyć INSERT IGNORE
lub REPLACE
lub INSERT ... ON DUPLICATE KEY UPDATE ...
Każdy wymaga unikalnego ograniczenia identyfikatora produktu, adresu ip
WSTAW IGNORUJ
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
zignoruje wstawkę, jeśli wpis już istnieje.
ZAMIEŃ
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
wykona usunięcie i nowe wstawienie.
WSTAW... AKTUALIZUJ
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Spróbuje wstawić, a jeśli to się nie powiedzie, zaktualizuje istniejący rekord.
W twoim przypadku myślę, że powinieneś być w porządku z INSERT IGNORE
, jednak jeśli chcesz zmienić inne wartości, jeśli rekord już istnieje, INSERT ... UPDATE ...
powinien działać dobrze.
Generalnie nie polecam używania REPLACE
chyba że naprawdę chcesz DELETE FROM table WHERE ...
plus INSERT INTO TABLE ...
Aktualizacja
Wymaga to (w tym przykładzie) unikalnego indeksu dla połączonego produktu, adres_ip. Możesz to osiągnąć za pomocą
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);