sql >> Base de Datos >  >> RDS >> Mysql

MySQL si la fila existe, actualice, de lo contrario, inserte

Eso es lo que se llama un Upsert . La sintaxis de MySQL es bastante rara, pero puedes hacerlo, algo como:

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

Sin embargo, solo funciona para PK duplicados (no para ningún campo que desee), por lo que en este caso solo funcionaría si userID y eventID compone el PK y solo desea cambiar el activityID

De lo contrario, podría seguir la ruta IF-ELSE, algo como:

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;

Descargo de responsabilidad:código totalmente no probado