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 设着为==唯一索引==。
在插入时,如果 informId 和 memberId 已经存在则对存在的 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)