Lägg först till en UNIQUE begränsning på namn, streckkod, artikel, plats och pris.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Sedan kan du använda 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 kan också användas men det finns skillnader i beteendet (vilket särskilt spelar roll om du har främmande nycklar). Mer information finns i den här frågan “INSERT IGNORE ” kontra “INSERT … PÅ DUBLIKAT UPPDATERING AV NYCKEL”
och svaret av @Bill Kawin som diskuterar skillnaderna mellan INSERT IGNORE , INSERT ... ON DUPLICATE KEY och REPLACE .