Bạn có thể sử dụng INSERT IGNORE
hoặc REPLACE
hoặc INSERT ... ON DUPLICATE KEY UPDATE ...
Mỗi yêu cầu bạn phải có một ràng buộc duy nhất đối với product_id, ip_address
CHÈN BỎ QUA
INSERT IGNORE INTO products VALUES (null, 111, '8.8.8.8')
sẽ bỏ qua phần chèn, nếu mục nhập đã tồn tại.
THAY THẾ
REPLACE INTO products VALUES (null, 111, '8.8.8.8')
sẽ thực hiện xóa cùng với chèn mới.
CHÈN ... CẬP NHẬT
INSERT INTO products VALUES (null, 111, '8.8.8.8')
ON DUPLICATE KEY UPDATE products SET last_modified = NOW()
Sẽ cố gắng chèn và nếu điều đó không thành công, hãy cập nhật bản ghi hiện có.
Trong trường hợp của bạn, tôi nghĩ bạn sẽ ổn với INSERT IGNORE
, tuy nhiên, Nếu bạn muốn thay đổi các giá trị khác nếu bản ghi đã tồn tại, hãy INSERT ... UPDATE ...
sẽ hoạt động tốt.
Nói chung, tôi không khuyên bạn nên sử dụng REPLACE
trừ khi bạn thực sự muốn DELETE FROM table WHERE ...
cộng với INSERT INTO TABLE ...
Cập nhật
Điều này yêu cầu (đối với ví dụ này) một chỉ mục duy nhất cho sản phẩm kết hợp, ip_address. Bạn có thể đạt được chỉ mục này với
ALTER TABLE products
ADD UNIQUE INDEX `UIDX_PRODUCT__IP_ADRESS`(product, ipaddress);