sql >> Databasteknik >  >> RDS >> Mysql

MySQL om rad finns uppdatera annars infoga

Det är vad som kallas en Upsert . MySQL-syntaxen är ganska konstig, men du kan göra det, ungefär som:

INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1)
ON DUPLICATE KEY UPDATE
  activityID = VALUES(activityID)

Det fungerar dock bara för dubbletter av PK:er (inte för vilket fält du vill), så i det här fallet skulle det bara fungera om userID och eventID komponera PK och du vill bara ändra activityID

Annars kan du gå OM-ELSE-rutten, något i stil med:

DECLARE mycount INT;
SET mycount = (SELECT COUNT(*) FROM eventcounter WHERE userID=1 AND eventID=1);
IF mycount > 0 THEN
  UPDATE eventcounter SET activityID=1 WHERE userID=1 AND eventID=1;
ELSE
  INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1);
END IF;

Friskrivningsklausul:helt oprövad kod



  1. Hur ställer man in kodningen för tabellernas char-kolumner i django?

  2. Efter att ha återställt min databasserie borttagen från kolumnen i Postgresql

  3. php och mysql kopiera post från en tabell till en annan

  4. Hur man ändrar datatyp i Oracle med befintliga rader i tabellen