Primeiro, adicione um
UNIQUE
restrição de nome, código de barras, item, localização e preço. ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Então você pode usar
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
também pode ser usado, mas há diferenças no comportamento (que importam especialmente se você tiver chaves estrangeiras). Para obter detalhes, consulte esta pergunta "INSERT IGNORE ” vs “INSERIR … NA ATUALIZAÇÃO DE CHAVE DUPLICADA”
e a resposta de @Bill Kawin, que discute as diferenças entre INSERT IGNORE
, INSERT ... ON DUPLICATE KEY
e REPLACE
.