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
https://dev.mysql.com/doc/refman/8.0/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