Tout d'abord, ajoutez un UNIQUE
contrainte sur le nom, le code-barres, l'article, l'emplacement et le prix.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Ensuite, vous pouvez utiliser 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
pourrait également être utilisé, mais il existe des différences dans le comportement (ce qui est particulièrement important si vous avez des clés étrangères). Pour plus de détails, consultez cette question "INSERT IGNORE ” vs “INSÉRER … SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE”
et la réponse de @Bill Kawin qui traite des différences entre INSERT IGNORE
, INSERT ... ON DUPLICATE KEY
et REPLACE
.