Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL INSERT oder UPDATE IF

Fügen Sie zuerst einen UNIQUE hinzu Beschränkung auf Name, Strichcode, Artikel, Standort und Preis.

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

Dann können Sie INSERT INTO ... ON DUPLICATE KEY UPDATE verwenden :

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 könnte auch verwendet werden, aber es gibt Unterschiede im Verhalten (was besonders wichtig ist, wenn Sie Fremdschlüssel haben). Einzelheiten finden Sie in dieser Frage „INSERT IGNORE ” vs „EINFÜGEN … BEI UPDATE DES DUPLIKATEN SCHLÜSSELS“ und die Antwort von @Bill Kawin, in der die Unterschiede zwischen INSERT IGNORE erörtert werden , INSERT ... ON DUPLICATE KEY und REPLACE .