Wenn Sie ON DUPLICATE KEY UPDATE
angeben
und ein Datensatz eingefügt wird, der einen doppelten Wert in
einem eindeutigen Index oder einem Primärschlüssel erzeugen
würde, dann wird für den alten Datensatz
UPDATE
ausgeführt. Angenommen, die Spalte
a
wird als UNIQUE
deklariert und enthält den Wert 1
; in
diesem Fall hätten die beiden folgenden Anweisungen dieselbe
Wirkung:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; UPDATE table SET c=c+1 WHERE a=1;
Der Wert der betroffenen Datensätze ist 1, wenn der Datensatz als neuer Datensatz eingefügt wird, und 2, wenn ein vorhandener Eintrag aktualisiert wird.
Wenn die Spalte b
ebenfalls eindeutig ist,
ist die INSERT
-Anweisung stattdessen
gleichbedeutend mit der folgenden
UPDATE
-Anweisung:
UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
Wenn a=1 OR b=2
mehreren Datensätzen
entspricht, wird nur ein Datensatz
aktualisiert. Generell sollten Sie von der Verwendung einer
ON DUPLICATE KEY
-Klausel bei Tabellen mit
mehreren eindeutigen Indizes absehen.
Sie können die Funktion
VALUES(
in der col_name
)UPDATE
-Klausel verwenden, um
Spaltenwerte aus dem INSERT
-Teil der
INSERT ... UPDATE
-Anweisung zu
referenzieren. Anders gesagt, verweist
VALUES(
in der col_name
)UPDATE
-Klausel auf den Wert von
col_name
, der eingefügt worden
wäre, wäre nicht ein Konflikt aufgrund einer
Schlüsseldublette aufgetreten. Diese Funktion ist
insbesondere bei Einfügevorgängen für mehrere Datensätze
praktisch. Die Funktion VALUES()
ist nur in
INSERT ... UPDATE
-Anweisungen sinnvoll zu
verwenden; andernfalls gibt sie NULL
zurück. Beispiel:
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
Diese Anweisung ist identisch mit den folgenden beiden Anweisungen:
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=3; INSERT INTO table (a,b,c) VALUES (4,5,6) ON DUPLICATE KEY UPDATE c=9;
Die Option DELAYED
wird ignoriert, wenn Sie
ON DUPLICATE KEY UPDATE
verwenden.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.