Mysql批量插入時奸披,有時候碰到的字段已經(jīng)在庫中存在時昏名,業(yè)務(wù)需求是更新而不是新插入,經(jīng)過多方查找阵面,可以通過此方法嘗試:
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 設(shè)著為==唯一索引==样刷。
在插入時仑扑,如果 informId 和 memberId 已經(jīng)存在則對存在的 row 執(zhí)行更新語句。
ON DUPLICATE KEY UPDATE
url=VALUES(url),beginTime=VALUES(beginTime),endTime=VALUES(endTime);
//其中這一語句的意思是:
//如果 informId 和 memberId 已經(jīng)存在,
//那么更新時 會爭對存在 row 的 url, beginTIme, endTime 進(jìn)行更新
//更新內(nèi)容為VALUES()包含的內(nèi)容置鼻,及插入時輸入的數(shù)據(jù)
如果使用 Mybatis 進(jìn)行插入:
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)