最近有这么个需求,往数据库插入新数据之前判断是否存在,如果已经存在那就更新,不存在新增。按照一贯思维,肯定是先查询,如果存在更新,不存在新增。
        这种写法也行,但是要访问两次数据库,况且如果一次有很多条数据要这样操作,非常消耗资源。

        介绍完了,直奔主题:

MySql有这么个功能: ON DUPLICATE KEY UPDATE。什么功能呢就是说如果存在就更新。

代码示例:

    <insert id="updateSettleForDuplicate">
        insert into t_quota_settle
            (year,quota_id,settle_amount,settle_price) values
        <foreach collection="list" item="item" separator="," >
            (#{item.year},#{item.quotaId},#{item.settleAmount},#{item.settlePrice})
        </foreach>
        ON DUPLICATE KEY UPDATE
         year = VALUES(year),quota_id = VALUES(quota_id),settle_amount =         
         VALUES(settle_amount),settle_price = VALUES(settle_price)
    </insert>
 

使用这种写法的前提是:操作的表需要有唯一键值。上半部分是正常的批量插入代码,后面的意思是如果插入的时候键值冲突了(说明已经存在相同键值的数据),那么就更新下面的字段值。

还有个注意的地方是:更新的字段需要在insert的字段里面,比如示例代码year=VALUES(year),这个year字段要在上面能找到。VALUES里面填写字段名称。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐