mysql ON DUPLICATE KEY UPDATE插入或者更新
对于已经存在的数据,进行更新操作,对于不存在数据新增操作;
这里有个判断已经存在的数据,什么样的数据才能是已经存在的呢….
1,主键相同
2,对于设置唯一(unique key)的字段的表,已经存在相同的字段
所以,对于主键自增或者uuid的主键,不存在update操作,所以只能在unique key上做文章…
将数据库可以作为key的字段设置为唯一,这样就相当于是使用Map的功能进行了….
上mybatis代码
<select id="batchUpdateOrInsert" parameterType="list">
insert into zn_comput_score
(cpu_text, cpu_score)
values
<foreach collection="list" item="item" index="index" separator=",">
(#{item.cpuText},#{item.cpuScore})
</foreach>
ON DUPLICATE KEY UPDATE
cpu_score = values(cpu_score)
</select>
表字段设计
CREATE TABLE `comput_score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cpu_text` varchar(255) DEFAULT NULL,
`cpu_score` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE KEY `index_cpu_text` (`cpu_text`) USING BTREE COMMENT 'cpu_text作为唯一索引执行更新插入操作'
) ENGINE=InnoDB AUTO_INCREMENT=249844 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
所以结果就应该是这样的…当然验证也是这样的
还没有评论,来说两句吧...