Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL, se a linha existir, atualize, caso contrário, insira


Isso é o que é chamado de Upsert . A sintaxe do MySQL é bem estranha, mas você pode fazer isso, algo como:
INSERT INTO eventcounter (userID, eventID, activityID) VALUES(1,1,1)
ON DUPLICATE KEY UPDATE
  activityID = VALUES(activityID)

Ele só funciona para PKs duplicados (não para qualquer campo que você goste), então neste caso só funcionaria se userID e eventID compor o PK e você só deseja alterar o activityID

Caso contrário, você pode seguir a rota 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;

Isenção de responsabilidade:código totalmente não testado