sql >> Databáze >  >> RDS >> Mysql

MySQL, pokud existuje řádek, aktualizujte jinak vložte

Tomu se říká Upsert . Syntaxe MySQL je docela divná, ale můžete to udělat, něco jako:

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

Funguje to však pouze pro duplicitní PK (ne pro jakékoli pole, které se vám líbí), takže v tomto případě by to fungovalo pouze v případě, že userID a eventID vytvořte PK a chcete změnit pouze activityID

Jinak byste mohli jít cestou IF-ELSE, něco jako:

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;

Zřeknutí se odpovědnosti:zcela netestovaný kód



  1. Jak mohu vyhledávat v tabulce hodnot oddělených čárkami?

  2. MySQL Uspořádat podle sloupce =x, sloupec vzestupně?

  3. Jak získat vygenerované klíče z dávkového vložení JDBC v Oracle?

  4. Chyba indexovaného zobrazení se skalárními agregáty