Alex: MySQL - UPDATE, wenn Datensatz vorhanden, sonst INSERT

Hallo,

ich habe folgendes Problem:
Ich möchte einen Datensatz aktualisieren, mittels UPDATE. Ich lasse also einen UPDATE-Befehl ausführen. Wenn der Datensatz noch nicht vorhanden ist, dann kann natürlich nichts aktualisiert werden. Wie finde ich diesen Fall heraus?
mysql_affected_rows() liefert mir auch "0", wenn der Datensatz zwar vorhanden ist, aber nicht wirklich aktualisiert wurde, also derselbe Wert versucht wurde, hereinzuschreiben. Eine If-Abfrage der Art:
if (mysql_affected_rows()==0) {
INSERT...
}
hilft also nicht weiter.

Wer weiß Rat?

Danke!

Alex

  1. Moin!

    Ich möchte einen Datensatz aktualisieren, mittels UPDATE. Ich lasse also einen UPDATE-Befehl ausführen. Wenn der Datensatz noch nicht vorhanden ist, dann kann natürlich nichts aktualisiert werden. Wie finde ich diesen Fall heraus?

    Ein SELECT machen, entsprechend verzweigen.

    Es gibt Alternativen:
    1. REPLACE ist eine Operation, die zwingend einen Primärschlüssel oder einen UNIQUE Index benötigt, damit Datensätze eindeutig identifiziert werden können. Ein REPLACE wirkt dann immer wie eine nicht teilbare DELETE/INSERT-Operation - mit allen damit verbundenen Auswirkungen, z.B. auf Timestamps.

    2. INSERT ... ON DUPLICATE KEY UPDATE ... funktioniert ab MySQL 4.1 und versucht das INSERT - wenn ein Primärindex oder Unique-Index aber dabei doppelt auftreten würde, wird die existierende Spalte mit dem (ggf. auch modifizierten) UPDATE bearbeitet. Siehe http://dev.mysql.com/doc/refman/4.1/en/insert.html

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!