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

MYSQL INDSÆT eller OPDATERE HVIS

Tilføj først en UNIQUE begrænsning på navn, stregkode, vare, placering og pris.

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

Så kan du bruge 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 kunne også bruges, men der er forskelle i adfærden (som især betyder noget, hvis du har fremmednøgler). For detaljer, se dette spørgsmål “INSERT IGNORE ” kontra “INDSÆT … PÅ DUBLIKAT NØGLOPDATERING” og svaret af @Bill Kawin, som diskuterer forskellene mellem INSERT IGNORE , INSERT ... ON DUPLICATE KEY og REPLACE .



  1. Hvordan kan jeg indsætte store filer i MySQL db ved hjælp af PHP?

  2. KONTROLLER begrænsning på fødselsdato?

  3. Hvordan indsætter man flere rækker i en mysql-database på én gang med forberedte udsagn?

  4. Sådan gendannes MySQL-database fra .myd-, .myi-, .frm-filer