sql >> Databasteknik >  >> RDS >> Mysql

MYSQL INFOGA eller UPPDATERA OM

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 .



  1. Hur man får UTC-värde för SYSDATE på Oracle

  2. Datum mellan 2 andra datum, utan hänsyn till årtal

  3. Java MYSQL Prepared Statement Fel:Kontrollera syntax för att använda nära '?' på rad 1

  4. Hur kan jag infoga JSON-objekt i Postgres med Java prepareStatement?