Mysql
 sql >> Database >  >> RDS >> Mysql

MYSQL INSERT o UPDATE SE

Innanzitutto, aggiungi un UNIQUE vincolo su nome, codice a barre, articolo, posizione e prezzo.

ALTER TABLE  tableX
  ADD CONSTRAINT tableX_UQ
    UNIQUE (name, barcode, item, location, price) ;

Quindi puoi usare 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 potrebbe anche essere usato ma ci sono differenze nel comportamento (che contano soprattutto se hai chiavi esterne). Per i dettagli, vedere questa domanda "INSERT IGNORE ” vs “INSERIRE... SU AGGIORNAMENTO CHIAVE DUPLICATA” e la risposta di @Bill Kawin che discute le differenze tra INSERT IGNORE , INSERT ... ON DUPLICATE KEY e REPLACE .