2017-03-05 4 views
0

Ich versuche, eine Zeile zu aktualisieren, oder fügen Sie sie ein, wenn es nicht existiert. Aber die INSERT ON DUPLICATE KEY UPDATE wird nicht funktionieren, da ich keine eindeutige Spalte verwende.wie zu aktualisieren, wenn existiert oder einfügen

INSERT INTO table (id, user, date, points) VALUES 
(1, 1, '2017-03-03', 25) 
(2, 1, '2017-03-04', 25) 
(3, 2, '2017-03-03', 100) 
(4, 2, '2017-03-04', 150) 

Jeder Benutzer hat eine Zeile für jeden Tag, an dem er Punkte erhält.

Gibt es eine Möglichkeit zu aktualisieren, wenn vorhanden oder einfügen, mit einem einzigen Aufruf von MySQL?

Antwort

0

Ja. Sie scheinen die Antwort zu kennen insert on duplicate key update. Sie müssen nur den richtigen eindeutigen Index:

CREATE UNIQUE INDEX unq_table_user_date ON table(user, date); 

Dann können Sie tun:

INSERT INTO table (id, user, date, points) 
    VALUES (1, 1, '2017-03-03', 25), 
      (2, 1, '2017-03-04', 25), 
      (3, 2, '2017-03-03', 100), 
      (4, 2, '2017-03-04', 150) 
    ON DUPLICATE KEY UPDATE points = VALUES(points) + points; 

ON DUPLICATE KEY UPDATE funktioniert mit jedem und alle eindeutigen Indizes. Die Syntax VALUES(points) erhält den neuen Wert für die Spalte.

+0

aus irgendeinem Grund bekam ich einen Syntaxfehler mit dem Wort SET. entfernt es und es funktioniert wie ein Charme. – greg

+0

@greg. . . Meine Finger schreiben einfach "SET" nach dem "UPDATE". Ich bin mir nicht sicher, was in sie hineinkommt. –

Verwandte Themen