Mysql upsert 使用技巧

本文深入探讨了Mysql中DUPLICATEKEYUPDATE的正确使用方法,强调其依赖于唯一索引的特性,并通过实例展示了如何构建合适的唯一索引以确保数据的唯一性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值