Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL si la ligne existe mettre à jour sinon insérer

C'est ce qu'on appelle un Upsert . La syntaxe MySQL est assez bizarre, mais vous pouvez le faire, quelque chose comme :

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

Cela ne fonctionne que pour les PK en double (pas pour n'importe quel champ que vous aimez), donc dans ce cas, cela ne fonctionnerait que si userID et eventID composez le PK et vous voulez seulement changer le activityID

Sinon, vous pouvez suivre la route IF-ELSE, quelque chose comme :

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;

Avis de non-responsabilité :code totalement non testé