MySQL ON DUPLICATE KEY UPDATE影响行数

news2024/11/24 16:19:26

背景

经常使用 ON DUPLICATE KEY UPDATE 来插入数据或者更新已存在的记录(不推荐,如性能问题),今天联调时发现使用到 MySQL 一个 INSERT ... ON DUPLICATE KEY UPDATE 的语法,明明只更新了两条记录,返回的影响行数竟然是 4,导致判断更新记录数出了问题,把 SQL 拿到 Navicat 上执行也是如此。

问题

原因

很奇怪,于是去网上搜索了一下原因,找到了这么一句说明:

原文链接:https://dev.mysql.com/doc/refman/8.4/en/insert-on-duplicate.html

With ON DUPLICATE KEY UPDATE, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values. 

ON DUPLICATE KEY UPDATE官方说明

也就是说,在 MySQL 中,使用 ON DUPLICATE KEY UPDATE 时,受影响的行数(affected-rows)根据操作类型有所不同:

  • 如果插入一行新记录,受影响的行数为 1。
  • 如果更新一行现有记录,受影响的行数为 2。
  • 如果更新一行现有记录但新值和旧值相同(即记录没有实际改变),受影响的行数为 0。

验证

1、新建一个 users 表

mysql> CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
Query OK, 0 rows affected (0.03 sec)

2、新增三条记录

INSERT INTO users (id, name, age) VALUES
(1, 'AA', 10),
(2, 'BB', 20),
(3, 'CC', 30)

3、使用 ON DUPLICATE KEY UPDATE 来更新两条记录——有更新

mysql> INSERT INTO users (id, name, age) VALUES
(1, 'Alice', 30),
(2, 'Bob', 35)
ON DUPLICATE KEY UPDATE
name = VALUES(name), age = VALUES(age);
Query OK, 4 rows affected (0.02 sec)
Records: 2  Duplicates: 2  Warnings: 0

由于主键冲突更新了两条记录,且数据有变化,确实返回了 4 rows affected

4、使用 ON DUPLICATE KEY UPDATE 来更新两条记录——无更新

继续执行上条 SQL 语句:

mysql> INSERT INTO users (id, name, age) VALUES
(1, 'Alice', 30),
(2, 'Bob', 35)
ON DUPLICATE KEY UPDATE
name = VALUES(name), age = VALUES(age);
Query OK, 0 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
mysql> 

此时虽然两条记录主键冲突导致更新,但是更新后的旧值和原值一样,受影响行数返回的是 0。

5、使用 ON DUPLICATE KEY UPDATE 来更新并插入新记录

mysql> INSERT INTO users (id, name, age) VALUES
(1, 'AAA', 30),
(4, 'DD', 35)
ON DUPLICATE KEY UPDATE
name = VALUES(name), age = VALUES(age);
Query OK, 3 rows affected (0.02 sec)
Records: 2  Duplicates: 1  Warnings: 0

此时主键为 1 的记录实际更新了数据,影响行数为 2,主键为 4 的记录为新增记录,影响行数为 1,总影响行数为 3,符合官方说明。

总结

ON DUPLICATE KEY UPDATE 写起来虽然方便,但是这个受影响行数是不可用于业务判断的,如批量插入判断插入行数。并且也有一定的性能影响,比单独的更新语句更耗时,建议少用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1930590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter接口测试之文件上传(参数提取与传递)

参考文档: Jmeter接口测试-文件上传(全网最详细的教程)_jmeter 文件上传-CSDN博客 1、首先通过fiddler抓取文件上传接口,在Raw的tab页中查看默认请求头以及请求参数 如图所示 2、在jmeter中导入抓取的接口,首先需要配…

ENSP中VLAN的设置

VLAN的详细介绍 VLAN(Virtual Local Area Network)即虚拟局域网,是一种将一个物理的局域网在逻辑上划分成多个广播域的技术。 以下是关于 VLAN 的一些详细介绍: 一、基本概念 1. 作用: - 隔离广播域&#xff1a…

怎样在 PostgreSQL 中优化对多表关联的连接条件选择?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 怎样在 PostgreSQL 中优化对多表关联的连接条件选择一、理解多表关联的基本概念二、选择合适的连接条件…

钡铼Modbus TCP耦合器BL200实现现场设备与SCADA无缝对接

前言 深圳钡铼技术推出的Modbus TCP耦合器为SCADA系统与现场设备之间的连接提供了强大而灵活的解决方案,它不仅简化了设备接入的过程,还提升了数据传输的效率和可靠性,是工业自动化项目中不可或缺的关键设备。本文将从Modbus TC、SCADA的简要…

去除重复字母

题目链接 去除重复字母 题目描述 注意点 s 由小写英文字母组成1 < s.length < 10^4需保证 返回结果的字典序最小&#xff08;要求不能打乱其他字符的相对位置&#xff09; 解答思路 本题与移掉 K 位数字类似&#xff0c;需要注意的是&#xff0c;并不是每个字母都能…

牛客周赛 Round 51 (C++)

目录 A-小红的同余_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; B-小红的三倍数_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; C-小红充电_牛客周赛 Round 51 (nowcoder.com) 思路&#xff1a; 代码&#xff1a; …

css - - - - - 环形倒计时进度条实现

css - - - - - 环形倒计时进度条实现 1. 效果图展示2. 代码展示 1. 效果图展示 2. 代码展示 // html <view class"father"><view class"progress" style"--progress:{{red}}; --last:{{gray}}"></view> </view>// css …

【区块链 + 智慧政务】澳门:智慧城市建设之证书电子化项目 | FISCO BCOS应用案例

2019 年 2 月 27 日&#xff0c;澳门政府设立的澳门科学技术发展基金与微众银行达成合作&#xff0c;通过区块链、人工智能、大数据、 云计算等创新技术&#xff0c;共同推进澳门特区的智慧城市建设与未来型城市发展&#xff0c;提升粤港澳大湾区的科创能力。在澳 门智慧城市建…

从零开始学量化~Ptrade使用教程(六)——盘后定价交易、港股通与债券通用质押式回购

盘后固定价交易 实现科创板、创业板的盘后固定价交易&#xff0c;界面如下显示&#xff1a; 交易 输入科创板或创业板代码&#xff0c;选择委托方向&#xff0c;输入委托价格、委托数量&#xff0c;点击“买入”或“卖出”按钮进行委托。可出现一个委托提示框提示是否继续委托操…

防火墙NAT地址转换和智能选举综合实验

一、实验拓扑 目录 一、实验拓扑 二、实验要求&#xff08;接上一个实验要求后&#xff09; 三、实验步骤 3.1办公区设备可以通过电信链路和移动链路上网(多对多的NAT&#xff0c;并且需要保留一个公网IP不能用来转换) 3.2分公司设备可以通过总公司的移动链路和电信链路访…

使用GPT3.5,LangChain,FAISS和python构建一个本地知识库

引言 介绍本地知识库的概念和用途 在现代信息时代&#xff0c;我们面临着海量的数据和信息&#xff0c;如何有效地管理和利用这些信息成为一项重要的任务。本地知识库是一种基于本地存储的知识管理系统&#xff0c;旨在帮助用户收集、组织和检索大量的知识和信息。它允许用户…

html5——CSS列表样式属性

list-style-type list-style-image list-style-position list-style eg&#xff1a; li { list-style:none; }【去除前面的黑点】

深度解析:disableHostCheck: true引发的安全迷局与解决之道

在Web开发的浩瀚星空中&#xff0c;开发者们时常会遇到各种配置与调优的挑战&#xff0c;其中disableHostCheck: true这一选项&#xff0c;在提升开发效率的同时&#xff0c;也悄然埋下了安全隐患的伏笔。本文将深入探讨这一配置背后的原理、为何会引发报错&#xff0c;以及如何…

Linux下如何安装配置Graylog日志管理工具

Graylog是一个开源的日志管理工具&#xff0c;可以帮助我们收集、存储和分析大量的日志数据。它提供了强大的搜索、过滤和可视化功能&#xff0c;可以帮助我们轻松地监控系统和应用程序的运行情况。 在Linux系统下安装和配置Graylog主要包括以下几个步骤&#xff1a; 准备安装…

TCP与UDP的理解

文章目录 UDP协议UDP协议的特点UDP的应用以及杂项 TCP协议TCP协议段格式解释和TCP过程详解确认应答机制 -- 序号和确认序号以及6位标志位中的ACK超时重传机制连接管理机制 与标志位SYN,FIN,ACK滑动窗口流量控制拥塞控制延迟应答捎带应答和面向字节流粘包问题TCP异常情况TCP特点…

华为USG6000V防火墙NAT智能选举

目录 一、拓扑图 二、要求 三、配置思路及方法 要求1&#xff1a;通过多对多的NAT实现上网功能 思路&#xff1a;基础IP地址配置按照之前的进行配置&#xff0c;接着在策略里配置多对多的NAT 要求2&#xff1a;分公司设备可以通过总公司的移动链路和电信链路访问到Dmz区的…

单链表算法 - 链表的回文结构

链表的回文结构_牛客题霸_牛客网对于一个链表&#xff0c;请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法&#xff0c;判断其是否为。题目来自【牛客题霸】https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa思路1: /* struct ListNode {int val;st…

flask学习

flask学习 一、什么是flask Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug &#xff0c;模板引擎则使用 Jinja2 。Flask使用 BSD 授权。Flask也被称为 “microframework” &#xff0c;因为它使用简单的核心&#xff0c;用 extension 增加…

【STM32嵌入式系统设计与开发---拓展】——1_9_1上拉输入和下拉输入

在使用GPIO引脚时&#xff0c;上拉输入和下拉输入的选择取决于外部电路的特性和应用需求。以下是它们各自的应用场景&#xff1a; 1、上拉输入&#xff08;Pull-up Input&#xff09; 用途: 当默认状态需要为高电平时。 避免引脚悬空&#xff08;floating&#xff09;导致的…

浅说区间dp(下)

文章目录 环形区间dp例题[NOI1995] 石子合并题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2006 提高组] 能量项链题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示思路 [NOIP2001 提高组] 数的划分题目描述输入格式输出格式样例 #1样例输…