Mysql
 sql >> Base de données >  >> RDS >> Mysql

INSERT MYSQL ou MISE À JOUR SI

Tout d'abord, ajoutez un UNIQUE contrainte sur le nom, le code-barres, l'article, l'emplacement et le prix.

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

Ensuite, vous pouvez utiliser 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 pourrait également être utilisé, mais il existe des différences dans le comportement (ce qui est particulièrement important si vous avez des clés étrangères). Pour plus de détails, consultez cette question "INSERT IGNORE ” vs “INSÉRER … SUR LA MISE À JOUR DE LA CLÉ EN DOUBLE” et la réponse de @Bill Kawin qui traite des différences entre INSERT IGNORE , INSERT ... ON DUPLICATE KEY et REPLACE .