Najpierw dodaj UNIQUE
ograniczenie dotyczące nazwy, kodu kreskowego, przedmiotu, lokalizacji i ceny.
ALTER TABLE tableX
ADD CONSTRAINT tableX_UQ
UNIQUE (name, barcode, item, location, price) ;
Następnie możesz użyć 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
może być również użyty, ale istnieją różnice w zachowaniu (co ma szczególne znaczenie, jeśli masz klucze obce). Aby uzyskać szczegółowe informacje, zobacz pytanie "WSTAW IGNORE ” vs „WSTAW… PRZY AKTUALIZACJI ZDUPLIKOWANEGO KLUCZA”
oraz odpowiedź @Bill Kawin, która omawia różnice między INSERT IGNORE
, INSERT ... ON DUPLICATE KEY
i REPLACE
.