Mysql `DUPLICATE KEY UPDATE` 技巧

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

这样就保证了数据是唯一的

你可能感兴趣的:(Mysql `DUPLICATE KEY UPDATE` 技巧)