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

MySQL, hvis rækken findes, opdatering ellers indsæt

Det er det, der kaldes en Upsert . MySQL-syntaksen er ret underlig, men du kan gøre det, sådan noget som:

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

Det virker dog kun for duplikerede PK'er (ikke for ethvert felt, du kan lide), så i dette tilfælde ville det kun fungere, hvis userID og eventID komponer PK'en, og du vil kun ændre activityID

Ellers kunne du gå IF-ELSE-ruten, noget som:

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;

Ansvarsfraskrivelse:Fuldstændig utestet kode



  1. Hvordan kan jeg tælle og gruppere kolonner separat med MySQL?

  2. Hvorfor returnerer MYSQL DB en beskadiget værdi, når der tages et gennemsnit over en Django models.DateTimeField?

  3. SQLSTATE[HY000] [2005] Ukendt MySQL-servervært 'mysql1.alwaysdata.com:3306' (2)

  4. mysql rækkefølge efter serialiserede data?