Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL, wenn Zeile vorhanden ist, aktualisieren, sonst einfügen

Das nennt man Upsert . Die MySQL-Syntax ist ziemlich seltsam, aber Sie können es tun, etwa so:

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

Es funktioniert jedoch nur für doppelte PKs (nicht für beliebige Felder), also würde es in diesem Fall nur funktionieren, wenn userID und eventID die PK zusammenstellen und Sie nur die activityID ändern möchten

Andernfalls könnten Sie die IF-ELSE-Route wählen, etwa so:

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;

Haftungsausschluss:völlig ungetesteter Code