De mémoire, si tu utilises MySQL il y a une intruction "REPLACE", qui permet de soi faire un INSERT, soit faire un UPDATE selon si la ligne existe. C'est le seul SGBD à ma connaissance à supporter ça (et c'est tout sauf standard).
Sinon, avec un SGBD propre, tu peux faire un trigger sur INSERT qui vérifie que la ligne n'existe pas. Si elle existe, alors il fait un UPDATE à la place.