yo,
es ist immer ganz interessant zu wissen, welches dbms du benutzt und welche version. ich gehe mal von mysql in verbindung mit php aus. mir ist es nicht bekant, dass es unter mysql so einen befehl gibt, der erst versucht den datensatz zu updaten und falls nicht vorhanden einen insert draus zu machen.
du kannst aber einen anderen weg gehen, als vorher ein select abzuschicken. du kannst einfach ein update auf verdacht machen und wenn der kein erfolg hat, dann ein insert hinterherschicken. und falls der eine eindeutigkeit wegen eines parallelprozess verletzt, bestehend aus user_id und item_id, dann kann man die fehlermeldung abfangen und wieder ein update machen.
Ilja