Vinzenz Mai: INSERT und UPDATE kombinieren

Beitrag lesen

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