MySql批量插入数据,已经存在的更新,不存在新增

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

        介绍完了,直奔主题:

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里面填写字段名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值