Jaime,
> why? seems that REPLACE only work if there are at least one row
> matching...
Scenario:
session1: REPLACE .... 1           
                  session2:  REPLACE ..... 1
session1: check to see that "1" exists .... no
                  session2: check to see that "1" exists .... no
session1: INSERT 1
                  session2: INSERT 1 .... ERROR
Get the picture?  The only way to avoid a race condition is to be able to 
do "predicate locking", that is to lock the table against any data write 
matching that predicate.
-- 
--Josh
Josh Berkus
Aglio Database Solutions
San Francisco