要是想先执行update语句呢?update更新失败执行insert,更新成功则执行update。幂等性的一个要求是多次操作的结果一致。对于update操作,多次直接的结果都是最后update的值,是满足需求的。但对于insert,如果已经插入,第二次会报错,duplicate error, 主键重复或者unique key duplicate。所以需要做一下处理。最简单的就是,try-catch,当报错的时候,调用update去更新,或者策略更简单点,直接返回就行,不需要更新,以第一条为准。PostgreSQL从9.5之后就提供了原子的upsert语法: 不存在则插入,发生冲突可以update。
暂无评论