INSERT und UPDATE kombinieren
Gero
- datenbank
0 Rolf Rost
0 Vinzenz Mai0 Gero
Hallo,
ich schreibe über die PHP-Funktion mysql_query();
Daten in eine MySQL-Datenbank. Wenn ich jetzt einen Befehl wie folgt
ausführen will, wird dieser ja nur geschrieben, wenn der Datensatz
bereits existiert.
UPDATE tabelle SET schluessel = wert WHERE session = 123
Wie kann ich erzielen, dass der Datensatz erstellt (INSERT) wird, wenn UPDATE fehlschlägt, _ohne_ eine PHP-if-else-Konstruktion zu bemühen?
Grüße,
Gero
Hallo,
ich schreibe über die PHP-Funktion
mysql_query();
Daten in eine MySQL-Datenbank. Wenn ich jetzt einen Befehl wie folgt
ausführen will, wird dieser ja nur geschrieben, wenn der Datensatz
bereits existiert.
UPDATE tabelle SET schluessel = wert WHERE session = 123
Wie kann ich erzielen, dass der Datensatz erstellt (INSERT) wird, wenn UPDATE fehlschlägt, _ohne_ eine PHP-if-else-Konstruktion zu bemühen?
Falls MySQL: schau mal nach REPLACE thats cool ;-)
Viele Grüße, Rolf
Hallo Rolf,
ich schreibe über die PHP-Funktion
mysql_query();
Daten in eine MySQL-Datenbank.
Falls MySQL
laut OP geht es um MySQL :-)
Wie kann ich erzielen, dass der Datensatz erstellt (INSERT) wird, wenn UPDATE fehlschlägt, _ohne_ eine PHP-if-else-Konstruktion zu bemühen?
Falls MySQL: schau mal nach REPLACE thats cool ;-)
Noch viel cooler ist es (falls MySQL 4.1.0 und neuer) das Problem von der anderen Seite anzugehen. Da REPLACE einen vorhandenen Datensatz löscht und dies nicht immer wünschenswert ist, ziehe ich folgendes vor:
Falls INSERT fehlschlägt wegen Schlüsselverletzung, wird ein UPDATE durchgeführt, die Klausel ON DUPLICATE KEY UPDATE
, siehe MySQL-Handbuch macht es möglich. Ich gehe davon aus, dass in dem Statement
UPDATE tabelle SET schluessel = wert WHERE session = 123
session das Schlüsselfeld darstellt, somit könnte man
INSERT tabelle
SET
schluessel = wert,
session =123
ON DUPLICATE KEY UPDATE
verwenden, damit der OP das gesteckte Ziel erreicht. Falls der Datensatz existiert und weitere Daten enthält, gehen diese nicht verloren.
Freundliche Grüße
Vinzenz
INSERT tabelle
SET
schluessel = wert,
session =123
ON DUPLICATE KEY UPDATE
Herzlichen Dank, Vinzenz! Eine wirklich elegante Lösung.
Grüße, Gero