MySQL: Frage zu ON DUPLICATE KEY UPDATE

Herr_M

Erfahrenes Mitglied
Ich arbeite mich gerade in ein fremdes Programm ein, dabei ist mir folgendes aufgefallen

Folgender Insert.

Insert tabelle
INTO tabelle.spaltex
VALUES( 123)
ON DUPLICATE KEY UPDATE
tabelle.spaltex = VALUES( tabelle.spaltex).

Wenn ich das richtig verstehe, würde der wert in spaltex doch mit sich selbst ersetzt werden oder? Da kann man sich das ganze doch gleich komplett sparen!
 
Ich hab mir jetzt noch ein paar mal das MySQL Referenzhandbuch zum Thema ON DUPLICATE KEY durchgelesen.
http://dev.mysql.com/doc/refman/5.1/de/insert-on-duplicate.html

Wenn ich das richtig verstanden habe, dann ersetzt der Teil
tabelle.spaltex = values(tabelle.spaltex) nicht den Inhalt der breits vorhanden ist quasi mit sich selbst, sondern den Wert der schon vorhandne ist durch den Wert der in diese Spalte eingefügt worden wäre, wenn nicht das Duplikat des Keys vorhanden wäre.

Hier mal ein Beispiel so wie ich es glaube verstanden zu haben.

Vor dem Insert hat spaltex den Wert 999 nun wird der Inserst ausgeführt

INSERT INTO tabelle
(123)
values
(tabelle.spaltex)
ON DUPLICATE KEY UPDATE
tabelle.spaltex = VALUES(tabelle.spaltex);

der Wert von spaltex wird nun durch 123 ersetzt.

Nach dem SQL hat die spaltex als nicht mehr den Wert 999 sondern 123?

INSERT IGNORE wäre hier dann also doch der falsche Ansatz.
 
Jo, sieht so aus. Die Verwendung von VALUES() im Update-Teil ist wohl eher für den Fall gedacht, dass man mehrere Datensätze auf einmal einfügen will.

Code:
INSERT INTO tabelle
(spaltex)
values
(123)
ON DUPLICATE KEY UPDATE
spaltex = VALUES(spaltex)

hätte also die gleiche Wirkung, wie ein einfaches

Code:
INSERT INTO tabelle
(spaltex)
values
(123)
ON DUPLICATE KEY UPDATE
spaltex = 123

LG
 

Neue Beiträge

Zurück