美文网首页
mysql批量insert时,若某个字段已经存在,则更新row

mysql批量insert时,若某个字段已经存在,则更新row

作者: 醉疯觞 | 来源:发表于2017-07-06 17:23 被阅读0次

    Mysql批量插入时,有时候碰到的字段已经在库中存在时,业务需求是更新而不是新插入,经过多方查找,可以通过此方法尝试:

    INSERT INTO 
        inf_inform
            (memberId,url,createTime,updateTime,endTime,beginTime)
        VALUES
            (memberId,url,now(),now(),now(),now()) 
        ON DUPLICATE KEY UPDATE 
            url=VALUES(url),beginTime=VALUES(beginTime),endTime=VALUES(endTime);
    

    inf_inform 表的字段有: informId, memberId, url, createTime, updateTime, endTime, beginTime
    其中 informId 为主键,自动生成,memberId 设着为==唯一索引==。
    在插入时,如果 informIdmemberId 已经存在则对存在的 row 执行更新语句。

        ON DUPLICATE KEY UPDATE 
            url=VALUES(url),beginTime=VALUES(beginTime),endTime=VALUES(endTime);
            
            //其中这一语句的意思是:
            //如果 informId 和 memberId 已经存在,
            //那么更新时 会争对存在 row 的 url, beginTIme, endTime 进行更新
            //更新内容为VALUES()包含的内容,及插入时输入的数据
            
    

    如果使用 Mybatis 进行插入:

    INSERT INTO inf_inform
        (memberId,url,createTime,updateTime,endTime,beginTime)
    VALUES
        <foreach collection="memberId" item="item" index="index" separator="," >  
                (#{item},#{url},now(),now(),
                str_to_date(#{endTime}, '%Y-%m-%d %H:%i:%s'),
                str_to_date(#{beginTime},'%Y-%m-%d %H:%i:%s'))  
            </foreach> 
        ON DUPLICATE KEY UPDATE
            url=VALUES(url),beginTime=VALUES(beginTime),endTime=VALUES(endTime)
    

    相关文章

      网友评论

          本文标题:mysql批量insert时,若某个字段已经存在,则更新row

          本文链接:https://www.haomeiwen.com/subject/qmtkhxtx.html