当前位置: 首页 > news >正文

71 mysql 中 insert into ... on duplicate key update ... 的实现

前言

这个也是我们经常可能会使用到的相关的特殊语句 

当插入数据存在 唯一索引 或者 主键索引 相关约束的时候, 如果存在 约束冲突, 则更新目标记录 

这个处理是类似于 逻辑上的 save 操作 

insert into tz_test_02 (field1, field2) values ('field11', '11') 
on duplicate key update field2 = '22'; 

 

 

该操作 整体逻辑类似于如下

Sting key = entity.key();
Object entityInDb = repository.findByKey(key);
if(entityInDb == null) {repository.insert(entity);return ;
}
repository.updateByKey(entity);

 

 

我们这里主要是从 mysql 源码的层面来看一下 mysql 这边是怎么处理的 

当然 相对比较简单, 大体的流程 和上面 一样, 我们会忽略 大部分的细节

相对来说 比较简单, 不花费太多的信息来描述 

 

测试数据表如下 

CREATE TABLE `tz_test_02` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`field1` varchar(128) DEFAULT NULL,`field2` varchar(128) DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,UNIQUE KEY `field_1` (`field1`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8

e5c7e3b014147202130ddbc8ef2824b5.png

 

 

服务器这边的数据插入

这里会先进行数据插入, 如果插入失败 走相关的补偿处理

463a31138603d5b06af88d243cf75206.png

 

然后在插入索引记录的时候, 由于 索引的唯一约束, 插入失败, 这里响应 DB_DUPLICATE_KEY 的错误 

b858774e08c4cebf61a5d5567a228d54.png

 

 

服务器这边数据更新

在补偿的处理里面, 根据目标条件对目标记录进行更新 

这里相当于执行的是 是一个 “update tz_test_02 set field2 = '22' where field1 = 'field11';”

10f2e9dc09c65fc71386d0135e943661.png

 

 

 

 

 

相关文章:

71 mysql 中 insert into ... on duplicate key update ... 的实现

前言 这个也是我们经常可能会使用到的相关的特殊语句 当插入数据存在 唯一索引 或者 主键索引 相关约束的时候, 如果存在 约束冲突, 则更新目标记录 这个处理是类似于 逻辑上的 save 操作 insert into tz_test_02 (field1, field2) values (field11, 11) on duplicate …...

计算机网络-GRE Over IPSec实验

一、概述 前情回顾:上次基于IPsec VPN的主模式进行了基础实验,但是很多高级特性没有涉及,如ike v2、不同传输模式、DPD检测、路由方式引入路由、野蛮模式等等,以后继续学习吧。 前面我们已经学习了GRE可以基于隧道口实现分支互联&…...

你的第一个博客-第一弹

使用 Flask 开发博客 Flask 是一个轻量级的 Web 框架,适合小型应用和学习项目。我们将通过 Flask 开发一个简单的博客系统,支持用户注册、登录、发布文章等功能。 步骤: 安装 Flask 和其他必要库: 在开发博客之前,首…...

若依启动项目时配置为 HTTPS 协议

文章目录 1、需求提出2、应用场景3、解决思路4、注意事项5、完整代码第一步:修改 vue.config.js 文件第二步:运行项目第三步:处理浏览器警告 6、运行结果 1、需求提出 在开发本地项目时,默认启动使用的是 HTTP 协议。但在某些测试…...

学习思考:一日三问(学习篇)之匹配VLAN

学习思考:一日三问(学习篇)之匹配VLAN 一、学了什么(是什么)1.1 理解LAN与"V"的LAN1.2 理解"V"的LAN怎么还原成LAN1.3 理解二层交换机眼中的"V"的LAN 二、为何会产生需求(为…...

[WiFi] WiFi 802.1x介绍及EAP认证流程整理

802.1X Wi-Fi 802.1X 是一种网络访问控制协议,常用于保护无线网络。它提供了一种基于端口的网络访问控制机制,主要用于在用户和网络之间建立安全的连接。以下是 802.1X 的一些关键特点: 认证框架 802.1X 使用 EAP(可扩展认证协议…...

用C#(.NET8)开发一个NTP(SNTP)服务

完整源码,附工程下载,工程其实也就下面两个代码。 想在不能上网的服务器局域网中部署一个时间服务NTP,当然系统自带该服务,可以开启,本文只是分享一下该协议报文和能跑的源码。网上作为服务的源码不太常见,…...

Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别

MyBatis 是一个用于简化数据库操作的框架,它可以帮助开发人员通过映射语句轻松执行 SQL 查询,并且能够方便地实现对象与数据库表之间的映射。MyBatis 支持一对一、一对多和多对多等关联查询。下面我们来探讨一下 MyBatis 如何实现一对一、一对多的关联查…...

ABAP SQL 取日期+时间最新的一条数据

我们在系统对接的时候,外部系统可能会推送多个数据给到我们。 我们 SAP 系统的表数据中日期和时间是作为主键的,那么如果通过 ABAP SQL 取到最新日期的最新时间呢。 解决方案: 方式 1:SELECT MAX 可以通过两个 SELECT MAX 来取…...

【Rust自学】4.3. 所有权与函数

4.3.0 写在正文之前 在学习了Rust的通用编程概念后,就来到了整个Rust的重中之重——所有权,它跟其他语言都不太一样,很多初学者觉得学起来很难。这个章节就旨在让初学者能够完全掌握这个特性。 本章有三小节: 所有权&#xff1…...

【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)

一、什么是分布式锁 我们在上篇文章中实现了单机模式下的秒杀业务。其中采用了synchronized加锁来解决各种线程安全问题。而synchronized关键字是依赖于单机的JVM,在集群模式下,每个服务器都有独立的JVM,如果此时还采用synchronized关键字加…...

用docker快速安装电子白板Excalidraw绘制流程图

注:本文操作以debian12.8 最小化安装环境为host系统。 一、彻底卸载原有的残留 apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras 二、设置docker的安装源 # Add Dockers official G…...

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动

使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…...

人工智能入门是先看西瓜书还是先看花书?

在人工智能入门时,关于先看《机器学习》(西瓜书)还是先看《深度学习》(花书)的问题,实际上取决于个人的学习目标和背景。 《机器学习》(西瓜书)由周志华教授撰写,是一本…...

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭

winform中屏蔽双击最大化或最小化窗体(C#实现),禁用任务管理器结束程序,在需要屏蔽双击窗体最大化、最小化、关闭 protected override void WndProc(ref Message m){#region 处理点击窗体标题栏放大缩小问题,禁用点击窗体标题栏放大缩小//logger.Info($&…...

进程内存转储工具|内存镜像提取-取证工具

1.内存转储,内存转储(Memory Dump)是将计算机的物理内存(RAM)内容复制到一个文件中的过程,这个文件通常被称为“内存转储文件”或“核心转储文件”(Core Dump),内存转储的主要目的是…...

数据结构day5:单向循环链表 代码作业

一、loopLink.h #ifndef __LOOPLINK_H__ #define __LOOPLINK_H__#include <stdio.h> #include <stdlib.h>typedef int DataType;typedef struct node {union{int len;DataType data;};struct node* next; }loopLink, *loopLinkPtr;//创建 loopLinkPtr create();//…...

(OCPP服务器)SteVe编译搭建全过程

注意&#xff1a;建议使用3.6.0&#xff0c;我升级到3.7.1&#xff0c;并没有多什么新功能&#xff0c;反而电表的实时数据只能看到累计电能了&#xff0c;我回退了就正常&#xff0c;数据库是兼容的&#xff0c;java版本换位java11&#xff0c;其他不变就好 背景&#xff1a;…...

Mybatis分页插件的使用问题记录

项目中配置的分页插件依赖为 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.7</version></dependency>之前的项目代码编写分页的方式为&#xff0c;通过传入的条件…...

36. Three.js案例-创建带光照和阴影的球体与平面

36. Three.js案例-创建带光照和阴影的球体与平面 实现效果 知识点 Three.js基础 WebGLRenderer WebGLRenderer 是Three.js中最常用的渲染器&#xff0c;用于将场景渲染到网页上。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobject可选参数&#…...

终极指南:如何使用Divinity Mod Manager轻松管理《神界:原罪2》模组

终极指南&#xff1a;如何使用Divinity Mod Manager轻松管理《神界&#xff1a;原罪2》模组 【免费下载链接】DivinityModManager A mod manager for Divinity: Original Sin - Definitive Edition. 项目地址: https://gitcode.com/gh_mirrors/di/DivinityModManager 如…...

颠覆式数据主权革命:WeChatMsg如何让你的聊天记录真正归属自己

颠覆式数据主权革命&#xff1a;WeChatMsg如何让你的聊天记录真正归属自己 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/…...

Comsol 仿真纳米孔超表面的手性响应:探索微观世界的光学奥秘

comsol仿真纳米孔超表面的手性响应在光学领域&#xff0c;超表面以其独特的亚波长结构展现出对光的卓越操控能力&#xff0c;而手性超表面更是其中的璀璨明珠&#xff0c;能够对不同旋向的圆偏振光产生特异响应。今天咱们就来聊聊如何用 Comsol 对纳米孔超表面的手性响应进行仿…...

Linux Docker Compose 部署.NET+Vue+MySQL+Redis+Nginx 完整记录(亲测无坑)

写在前面&#xff1a;为什么用 Docker Compose&#xff1f;比单容器部署好在哪&#xff1f; 做容器化部署时&#xff0c;单靠docker run命令逐个启动 MySQL、Redis、后端、Nginx 容器会非常繁琐 —— 不仅要记大量命令参数&#xff0c;还得手动控制容器启动顺序、配置网络联动…...

MongoDB时间戳转换实战:从数字到标准时间格式的完整指南

1. MongoDB时间戳转换的核心概念 第一次接触MongoDB时间戳转换时&#xff0c;我也被各种时间格式搞得晕头转向。简单来说&#xff0c;MongoDB中的时间戳主要有三种存储形式&#xff1a;数字类型&#xff08;如1655448286502&#xff09;、字符串类型&#xff08;如"165544…...

个人知识管理:用OpenClaw+nanobot构建第二大脑

个人知识管理&#xff1a;用OpenClawnanobot构建第二大脑 1. 为什么需要第二大脑&#xff1f; 作为一名技术写作者&#xff0c;我每天要处理大量信息&#xff1a;技术文档、行业报告、代码片段、会议记录...这些碎片化知识散落在浏览器书签、微信收藏、本地文档里&#xff0c…...

OpenClaw+QwQ-32B客服模拟:电商问答自动化测试

OpenClawQwQ-32B客服模拟&#xff1a;电商问答自动化测试 1. 为什么需要自动化客服测试 去年双十一前&#xff0c;我们团队遇到了一个棘手问题&#xff1a;每次大促前&#xff0c;客服团队都要手动测试上百个产品页面的问答话术。人工测试不仅耗时耗力&#xff0c;还经常遗漏…...

如何专业掌握小熊猫Dev-C++现代化开发:解锁10个高效编程技巧

如何专业掌握小熊猫Dev-C现代化开发&#xff1a;解锁10个高效编程技巧 【免费下载链接】Dev-CPP A greatly improved Dev-Cpp 项目地址: https://gitcode.com/gh_mirrors/dev/Dev-CPP 小熊猫Dev-C作为一款深度优化的现代化C/C集成开发环境&#xff0c;为编程学习者和专业…...

嵌入式系统命令模式实现撤销功能

嵌入式误操作救星&#xff1a;基于命令模式的撤销方案设计与实现1. 项目概述在嵌入式系统开发中&#xff0c;配置参数管理是一个常见但容易出错的场景。当用户误操作导致重要配置被重置时&#xff0c;如何快速恢复到之前的状态成为系统设计的关键需求。本文介绍一种基于命令模式…...

无缝全流程开源项目本地化:技术特性与用户收益深度解析

无缝全流程开源项目本地化&#xff1a;技术特性与用户收益深度解析 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n 开源项目本地化是全球化协作时代的关键需求&#xff0c;它不仅关乎用户体验的流畅性&#xff0c;更是项目…...