mysql批量插入数据时,会存在重复数据的可能.
解决方法:
1)数据库加联合索引
2)修改sql,忽略重复的数据,防止数据库报错
1.给表创建唯一索引
CREATE TABLE `merchantBlackList` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`createTime` datetime NOT NULL,
`bankId` int(10) DEFAULT NULL COMMENT '银行id',
`merchantSn` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商户编号',
PRIMARY KEY (`id`),
UNIQUE KEY `bankId_merchantSn` (`bankId`,`merchantSn`)//联合索引
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.使用on dupdate key update ,语句基本功能是:当表中没有原来记录时,就插入,有的话就更新。
1,on duplicate key update 语句根据主键id或唯一键来判断当前插入是否已存在。
2,记录已存在时,只会更新on duplicate key update之后指定的字段。
3,如果同时传递了主键和唯一键,以主键为判断存在依据,唯一键字段内容可以被修改。
<insert id="batchInsert" parameterType="ArrayList">
INSERT INTO merchantBlackList(createTime,bankId,merchantSn)
VALUES
<foreach collection="list" item="item" index="index" separator="," >
(#{item.createTime},#{item.bankId},#{item.merchantSn})
</foreach>
ON DUPLICATE KEY UPDATE
bankId=VALUES(bankId),
merchantSn=VALUES(merchantSn);
</insert>