Ein Teil des Systems, an dem ich gerade arbeite, ist ein mysql-Protokoll, bei dem die Anzahl häufig aktualisiert wird.MySQL-Funktion zum Einfügen von Datensatz, wenn das Update fehlschlägt?
Die Daten eingefügt werden, ist das Format:
date | name | count |
-----------+------+-------+
2009-01-12 | alan | 5 |
2009-01-12 | dave | 2 |
2009-01-12 | mary | 1 |
Diese Daten regelmäßig aus einer flachen Datei analysiert wird, wie oben in der Vorbereitung für einen db insert/update zusammengefasst - der eindeutige Schlüssel für die Datenbank ist die (date, name)
Paar.
Zuvor wurde dieses System die vorhandene Tabelle auf Datensätze für ein bestimmtes date
und name
Paar prüfen, bevor eine Aktualisierung oder ein Einfügen entschieden wurde.
Das Problem, das wir haben, ist, wie diese Tabelle wächst, die Antwortzeit wird nicht besser, und wir wollen die Anzahl der Abfragen so weit wie möglich reduzieren.
Das System wurde vor kurzem eine INSERT ... ON DUPLICATE KEY UPDATE
Abfrage auszuführen aktualisiert, die die Anzahl der select
s mit deutlichem Abstand geringfügig, aber unsere gemeinsamen Fall ist die update
reduziert hat.
Ich frage mich, ob jemand weiß eine mysql-Funktion, die im Wesentlichen INSERT ... ON DUPLICATE KEY UPDATE
in umgekehrter Reihenfolge, d. H. Wird versuchen, eine Zeile zu aktualisieren, wenn keine übereinstimmen, dann führen Sie die Einfügung?
bearbeiten
ich nicht machen war es klar, über das, was ich tun möchte, wenn ich den Rekord ('2009-01-12','alan','5')
zum Beispiel haben, ist:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
und wenn die oben schlägt fehl, fügen Sie die obigen Daten ein. Die Notwendigkeit, einen Zähler zu erhöhen, ist der Grund, warum REPLACE
nicht funktioniert. Ersetzen Sie führt einen Lösch & Einsatz und lässt Sie nicht auf die Zeile verweisen gelöscht werden, so würde count = count + 5
nicht den vorherigen count
Wert erhöhen für von 5.
@jasoncohen - die INSERT ... ON DUPLICATE KEY UPDATE
die Arbeit tut, aber ich Ich frage, ob es einen optimaleren Weg gibt, dies zu tun.
Entschuldigung für jegliche Verwirrung aufgrund der schlechten Originalphrasierung!
Macht Sinn, fragte mehr in der Hoffnung als Erwartung, dass es eine magische, super-performende MySQL-Abfrage dafür gibt! – ConroyP
Ein Anwendungsbeispiel wäre nett. –
@HelgaIliashenko bitten, zuerst nach einem Verwendungsbeispiel zu fragen, bevor das Downvoting wäre nett –