mongo中会有
upsert
,Mysql只能使用DUPLICATE KEY UPDATE
来实现,发现数据条数减少,而且数据不正确。经过进一步的排查,发现使用DUPLICATE KEY UPDATE
是有技巧的。
技巧
DUPLICATE KEY UPDATE
是建立在唯一索引之上的,也就是组成的key
必需是唯一的,也就是要符合我们的条件。
使用
INSERT INTO `demo`(`a`,`b`,`c`,`value`) VALUES('admin','admin','admin',1) ON DUPLICATE KEY UPDATE `value`=`value`+1
要想只更新value
的值,abc所组合的字段必需要建立唯一索引。
CREATE TABLE `plan0920_report_copy1` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`a` varchar(128) NOT NULL DEFAULT '' COMMENT 'a',
`b` varchar(128) NOT NULL DEFAULT '' COMMENT 'b',
`c` varchar(128) NOT NULL DEFAULT '' COMMENT 'c',
`value` bigint(20) NOT NULL COMMENT 'value',
PRIMARY KEY (`id`),
UNIQUE KEY `uidx_a_b_c` (`a`,`b`,`c`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8mb4 COMMENT='demo 表';
索引结构应该如上所述
UNIQUE KEY `uidx_a_b_c` (`a`,`b`,`c`) USING BTREE
这样就保证了数据是唯一的