在开发过程中,我们肯定遇到过需要先查库对一条数据进行判断,如果数据存在则更新,数据不存在则插入的操作,每次都需要在service层写判断逻辑,查多次库,这样不仅效率不高,也会增加数据库压力,后面了解到了mysql的on duplicate key update,确实好用,下面简单介绍一下on duplicate key update的使用。
on duplicate key update作用于主键索引或唯一索引,可以在sql中先判断该主键索引或唯一索引的值在数据库中是否存在,不存在则插入,存在就更新。下面的sql的唯一索引是uid+conf_id,如果uid+conf_id的值已经存在了,就会修改join_time的值,如果不存在就会插入一条新数据。
<insert id="save" parameterType="ConfUserTbl">
insert into
conf_user_tbl(conf_class,uid,conf_id,conf_sid,time,close_time,is_creator,is_admin,status,media,join_time,quit_time,refer_from,other_info)
values(#{confClass},#{uid},#{confId},#{confSid},#{time},#{closeTime},#{isCreator},#{isAdmin},#{status},#{media},#{joinTime},#{quitTime},#{referFrom},#{otherInfo})
on duplicate key update join_time=#{joinTime}
</insert>
注意:如果insert的数据中的主键或唯一索引的值已经在数据库中存在了,那on duplicate key update后要保证不跟同样值得主键或唯一索引,否则就会导致插入或者更新都失败。