Gero: INSERT und UPDATE kombinieren

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

  1. 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

    1. 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

      1. INSERT tabelle

        SET
            schluessel = wert,
            session =123
        ON DUPLICATE KEY UPDATE

          
          
        Herzlichen Dank, Vinzenz! Eine wirklich elegante Lösung.  
          
        Grüße, Gero