Robert: Gibt es sowas wie UPDATE or INSERT ?

Beitrag lesen

Hallöle,

Ich hab eine Tabelle aus
userid, itemid, timeoflastuse

Wenn der User jetzt das Item benutzt, soll die timeoflastuse gesetzt werden.

Jetzt gibt es zwei Fälle:
Der User hat das Item schon mal benutzt, dann existiert ja der Datensatz schon und es muß nur timeoflastuse auf den aktuellen Stand gebracht werden - also ein
UPDATE mytable SET timeoflastuse=NOW() WHERE userid=17 AND itemid=42.

Und dann gibt es noch den Fall, daß der User das Item das erste Mal benutzt. Dann muß der Datensatz eingefügt werden:
INSERT INTO mytable SET userid=17, itemid=42, timeoflastuse=NOW()

Um rauszufinden, welcher Fall vorliegt, muß ich aber vorher abfragen, ob das der Fall ist, also
SELECT COUNT(*) FROM mytable WHERE userid=17 AND itemid=42

Das gefällt mir irgendwie nicht - insbesondere weil dann auch noch die Gefahr besteht, daß zwei parallel laufende Prozesse ggf. dazu führen, daß doppelte Einträge entstehen (Prozeß A frag ab, bekommt 0 - dann fragt Prozeß B ab, bekommt ebenfalls 0, dann führt jeder der Prozesse seinen INSERT durch). Ok, das könnte man noch mit einem UNIQUE INDEX auf userid + itemid vermeiden.

Aber noch lieber wäre mir, wenn das ganze mit einem einzigen SQL-Statement ginge ...
cu,
Robert