Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MYSQL INSERT ou UPDATE IF


Primeiro, adicione um UNIQUE restrição de nome, código de barras, item, localização e preço.
ALTER TABLE  tableX
  ADD CONSTRAINT tableX_UQ
    UNIQUE (name, barcode, item, location, price) ;

Então você pode usar 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 também pode ser usado, mas há diferenças no comportamento (que importam especialmente se você tiver chaves estrangeiras). Para obter detalhes, consulte esta pergunta "INSERT IGNORE ” vs “INSERIR … NA ATUALIZAÇÃO DE CHAVE DUPLICADA” e a resposta de @Bill Kawin, que discute as diferenças entre INSERT IGNORE , INSERT ... ON DUPLICATE KEY e REPLACE .