MySQL: INSERT … ON DUPLICATE KEY UPDATE …

MySQL bietet die Möglichkeit, beim Ausführen eines INSERT INTO ein UPDATE auszuführen, falls es beim Einfügen des Datensatzes zu einem dublicate key kommt. Dies lässt sich mit folgender Eingabe erzielen:

INSERT INTO <table> (<field1>, <field2>) VALUES (<value1>, <value2>)
ON DUPLICATE KEY UPDATE <field2> = <field2> + 1;

Sollte es bei der Ausführung der INSERT-Anweisung zu einem doppelten Eintrag in einer als PRIMARY KEY oder UNIQUE KEY definierten Spalte kommen, dann wendet MySQL die UPDATE-Anweisung auf den Datensatz an, der zu dem doppelten Inhalten führt.

Dokumentation

http://dev.mysql.com/doc/refman/4.1/en/insert-on-duplicate.html

Ein Beispiel

Wozu kann diese Anweisung verwendet werden? Bei Tabellen für statistische Daten können Datensätze beispielsweise mit einem Zeitstempel als PRIMARY KEY gespeichert werden.
Nachstehend sind die Ausgaben eines kurzen Beispiels gezeigt, bei dem INSERT ... ON DUPLICATE KEY UPDATE zweimal auf die gleiche Tabelle angewendet wird. Die Spalte id wurde als PRIMARY KEY definiert. Bei der ersten Anweisung existiert der Datensatz noch nicht.

mysql> SELECT id, requests FROM stats;
...
| id         | requests |
| 2011-01-23 |       34 |
| 2011-01-22 |      230 |
...
mysql> INSERT INTO stats (id, requests) VALUES ('2011-01-24', 1)
ON DUPLICATE KEY UPDATE requests = requests + 1;
mysql> SELECT id, requests FROM stats;
...
| id         | requests |
| 2011-01-24 |        1 |
| 2011-01-23 |       34 |
...
mysql> INSERT INTO stats (id, requests) VALUES ('2011-01-24', 1)
ON DUPLICATE KEY UPDATE requests = requests + 1;
mysql> SELECT id, requests FROM stats;
...
| id         | requests |
| 2011-01-24 |        2 |
| 2011-01-23 |       34 |
...

Leave a Reply

Your email address will not be published. Required fields are marked *