sql >> Databáze >  >> RDS >> Mysql

MYSQL INSERT nebo UPDATE IF

Nejprve přidejte UNIQUE omezení na název, čárový kód, položku, umístění a cenu.

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

Poté můžete použít 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 lze také použít, ale existují rozdíly v chování (které zvláště záleží, pokud máte cizí klíče). Podrobnosti naleznete v této otázce “INSERT IGNORE “ vs “VLOŽTE … PŘI AKTUALIZACI DUPLIKÁTNÍHO KLÍČE” a odpověď od @Bill Kawin, která pojednává o rozdílech mezi INSERT IGNORE , INSERT ... ON DUPLICATE KEY a REPLACE .



  1. Jak mohu provést mnoho dotazů na jedné stránce?

  2. SQL SELECT LIKE (necitlivá malá a velká písmena)

  3. Zobrazit výsledky dotazu SQL v php

  4. Potřebujete vypsat všechny spouštěče v databázi SQL Server s názvem tabulky a schématem tabulky