Đầu tiên, thêm một UNIQUE
ràng buộc về tên, mã vạch, mặt hàng, vị trí và giá cả.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Sau đó, bạn có thể sử dụng INSERT INTO ... ON DUPLICATE KEY UPDATE
:
INSERT INTO tableX
(name, barcode, item, location, price, quantity, date)
VALUES
(?, ?, ?, ?, ?, ?, ?)
ON DUPLICATE KEY UPDATE
quantity = CASE WHEN VALUES(date) > date
THEN quantity + VALUES(quantity) -- add quantity
ELSE quantity -- or leave as it is
END
, date = CASE WHEN VALUES(date) > date
THEN VALUES(date) ; -- set date to new date
ELSE date -- or leave as it is
END
REPLACE
cũng có thể được sử dụng nhưng có sự khác biệt về hành vi (điều này đặc biệt quan trọng nếu bạn có khóa ngoại). Để biết chi tiết, hãy xem câu hỏi này “CHÈN BỎ QUA ”So với“ CHÈN… TRÊN CẬP NHẬT KHÓA DUPLICATE ”
và câu trả lời của @Bill Kawin thảo luận về sự khác biệt giữa INSERT IGNORE
, INSERT ... ON DUPLICATE KEY
và REPLACE
.