Voeg eerst een UNIQUE . toe beperking op naam, streepjescode, artikel, locatie en prijs.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Dan kunt u INSERT INTO ... ON DUPLICATE KEY UPDATE . gebruiken :
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 ook worden gebruikt, maar er zijn verschillen in het gedrag (wat vooral van belang is als u externe sleutels hebt). Zie deze vraag voor meer informatie “INSERT IGNORE ” vs “INSERT … ON DUPLICATE KEY UPDATE”
en het antwoord van @Bill Kawin dat de verschillen bespreekt tussen INSERT IGNORE , INSERT ... ON DUPLICATE KEY en REPLACE .