如何在MySQL中实现upsert:如果不存在则插入?

目录

1 使用 REPLACE

2 使用 INSERT ... ON DUPLICATE KEY UPDATE


使用 INSERT IGNORE 有效会导致 MySQL 在尝试执行语句时忽略执行错误 INSERT 。这意味着 包含 索引或  字段 INSERT IGNORE 中重复值的语句 不会 产生错误,而只是完全忽略该特定 命令。其明显目的是 针对数据库中已存在的数据以及进入系统的新数据的组合 执行大量语句。

例如,我们的 books 表可能已经包含一些记录:

mysql> SELECT * FROM books LIMIT 3;
+----+-------------------------+---------------------+----------------+
| id | title                   | author              | year_published |
+----+-------------------------+---------------------+----------------+
|  1 | In Search of Lost Time  | Marcel Proust       |           1913 |
|  2 | Ulysses                 | James Joyce         |           1922 |
|  3 | Don Quixote             | Miguel de Cervantes |           1605 |
+----+-------------------------+---------------------+----------------+
3 rows in set (0.00 sec)

如果我们有大量新数据和现有数据, INSERT 并且其中一部分数据包含字段的匹配值 id ( UNIQUE PRIMARY_KEY 表中的),则使用基本方法 INSERT 将产生预期的错误:

mysql> INSERT INTO books(id, title, author, year_published)
VALUES(1, 'Green Eggs and Ham''Dr. Seuss', 1960);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

另一方面,如果我们使用 INSERT IGNORE,则重复尝试将被忽略,并且不会发生任何错误:

mysql> INSERT IGNORE INTO books(id, title, author, year_published)
VALUES(1, 'Green Eggs and Ham''Dr. Seuss', 1960);
Query OK, 0 rows affected (0.00 sec)

1 使用 REPLACE


如果您希望实际替换 由于重复 或  如上所述的值而 INSERT 导致命令产生错误的行 ,则一种选择是选择该 语句。UNIQUEPRIMARY KEYREPLACE

当发出 REPLACE 语句时,每个发出的命令都有两种可能的结果:

  • 未找到具有匹配值的现有数据行,因此 INSERT 执行标准语句。
  • 找到匹配的数据行,导致使用标准语句删除该现有行 ,然后 执行DELETE 正常操作 。INSERT

例如,我们可以使用  苏斯博士的《绿鸡蛋和火腿》REPLACE 替换掉  马塞尔·普鲁斯特的《 id = 1 追忆似水年华》的现有记录:

mysql> REPLACE INTO books(id, title, author, year_published)
VALUES(1, 'Green Eggs and Ham''Dr. Seuss', 1960);
Query OK, 2 rows affected (0.00 sec)

请注意,尽管我们只改变了一行,但结果表明有  行受到了影响,因为我们实际上是 DELETED 用现有行 INSERTED 来替换它。

有关使用的更多信息, REPLACE 请参阅 官方文档。

2 使用 INSERT ... ON DUPLICATE KEY UPDATE


 对于可能包含重复或 值的INSERTING 行, 替代的(通常是首选的)方法  是使用  语句和子句。UNIQUEPRIMARY KEYINSERT ... ON DUPLICATE KEY UPDATE

与 REPLACE - 由于 DELETE 它在必要时执行的命令而具有固有的破坏性命令 - 使用 INSERT ... ON DUPLICATE KEY UPDATE 是非破坏性的,因为它只会发出 INSERT 或 UPDATE 语句,但绝不会 DELETE

例如,我们决定替换 “绿鸡蛋和火腿”id = 1 的记录  ,并将其恢复为原始的“ 追忆似水年华” 记录。因此,我们可以采用原始  语句并添加新  子句:INSERTON DUPLICATE KEY UPDATE

mysql> SET @id = 1,@title = 'In Search of Lost Time',@author = 'Marcel Proust',@year_published = 1913;
INSERT INTO books(id, title, author, year_published)
VALUES(@id@title@author@year_published)
ON DUPLICATE KEY UPDATEtitle = @title,author = @author,year_published = @year_published;

请注意,我们使用了正常 UPDATE 语法(但不包括不必要的 table 名称和 SET 关键字),并且只分配值 non-UNIQUE 。此外,尽管该方法不需要它们 ON DUPLICATE KEY UPDATE 才能正常运行,但我们也选择使用它们, user variables 这样我们就不需要  多次指定我们想要的INSERT 实际 值。UPDATE

结果,我们的 id = 1 记录正如 UPDATED 预期的那样:

mysql> SELECT * FROM books LIMIT 1;
+----+------------------------+---------------+----------------+
| id | title                  | author        | year_published |
+----+------------------------+---------------+----------------+
|  1 | In Search of Lost Time | Marcel Proust |           1913 |
+----+------------------------+---------------+----------------+
1 row in set (0.00 sec)

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

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

相关文章

[word] word大括号怎么打两行 #其他#其他#微信

word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具,帮助用户节省时间,并得到优雅美观的结果。 一直以来,Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序, Word 提供了许多易…

秒杀优化+秒杀安全

1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法,在bean初始化之后将库存信息加载到Redis /*** 系统初始化,将秒杀商品库存加载到redis中** throws Excepti…

【YOLOv10】使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!

NVIDIA TensorRT ™ 是一款用于高性能深度学习推理的 SDK,包含深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法,通过消除NMS、优化模型架构和引入创新模块等策…

平稳交付 20+ 医院,卓健科技基于 OpenCloudOS 的落地实践

导语:随着数字化转型于各个行业领域当中持续地深入推进,充当底层支撑的操作系统正发挥着愈发关键且重要的作用。卓健科技把 OpenCloudOS 当作首要的交付系统,达成了项目交付速度的提升、安全可靠性的增强、运维成本的降低。本文将会阐述卓健科…

【转】ES, 广告索引

思考: 1)直接把别名切换到上一个版本索引 --解决问题 2)广告层级索引如何解决? -routing、join 3)查询的过程:query and fetch, 优化掉fetch 4)segment合并策略 5)全量写入时副…

gcc与g++的原理

程序的翻译 1 快速认识gcc/g2 程序翻译的过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4 链接阶段 3 动静态库 1 快速认识gcc/g 首先我们需要在linux系统中安装对应的编译器gcc/g,安装命令如下(centos7环境下): gcc: yum instal…

什么是哈希冲突?如何解决哈希冲突?HashMap和TreeMap之间的区别?

Map 和 Set 的概念 Map和Set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关 。 为什么说它是一种专门用来进行搜索的数据结构呢? 我们应该都用过“遍历查找”、“二分查找”,这两种方式也都是用来对目标…

Spring Security系列之PasswordEncoder

概述 任何一个登录系统的密码不能明文存储,万一发生数据库泄漏事故(不管是内部人员导出数据库数据还是被黑客攻击破解数据库实例节点拿到数据库数据等,又或者是其他情况造成的),将产生巨大的损失。因此明文密码在存储…

DOS 操作系统

DOS 介绍 DOS:disk operating system,磁盘操作系统。 中国DOS联盟下载 MS-DOS 7.10完整安装版(含图形安装程序) DOS 环境下的操作 输入部分内容后按下 Tab 可以快速自动补全。 按住 Ctrl 键可以用鼠标滚轮改变字号大小。 DO…

【数据结构初阶】--- 顺序表

顺序表,好像学C语言时从来没听过,实际上就是给数组穿了层衣服,本质是一模一样的。 这里的顺序表实际是定义了一个结构体,设计各种函数来实现它的功能,比如说数组中的增删改查插入,这些基本操作其实平时就会…

c++调用动态库LNK2019无法解析的外部符号LNK1120无法解析的外部命令

严重性 代码 说明 项目 文件 行 禁止显示状态 错误 LNK1120 6 个无法解析的外部命令 ConsoleApplication1 D:\vs_qt_project\ConsoleApplication1\x64\Debug\ConsoleApplication1.exe 1 严重性 代码 说明 项目 文件 行 …

应用层——HTTP协议(自己实现一个http协议)——客户端(浏览器)的请求做反序列化和请求分析,然后创建http向响应结构

应用层:之前我们写的创建套接字,发送数据,序列化反序列化这些都是在写应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层 之前的网络计算机是我们自定义的协议:传输的数据最终是什么样的结…

高级文件操作

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 Python内置的os模块除了可以对目录进行操作,还可以对文件进行一些高级操作,具体函数如表4所示。 表4 os模块提供的与文件相…

【AI基础】第三步:纯天然保姆喂饭级-安装并运行chatglm2-6b

chatglm2构建时使用了RUST,所以在安装chatglm2之前,先安装RUST。 此系列文章列表: 【AI基础】第一步:安装python开发环境-windows篇_下载安装ai环境python-CSDN博客 【AI基础】第一步:安装python开发环境-conda篇_mini…

知识图谱的应用---智慧司法

文章目录 智慧司法典型应用 智慧司法 智慧司法是综合运用人工智能、大数据、互联网、物联网、云计算等信息技术手段,遵循司法公开、公平、公正的原则,与司法领域业务知识经验深度融合,使司法机关在审判、检查、侦查、监管职能各方面得到全面的…

【数据结构】图论入门

引入 数据的逻辑结构: 集合:数据元素间除“同属于一个集合”外,无其他关系线性结构:一个对多个,例如:线性表、栈、队列树形结构:一个对多个,例如:树图形结构&#xff1…

SpringBoot中的WebMvcConfigurationSupport和WebMvcConfigurer

在SpringBoot中可以通过以下两种方式来完成自定义WebMvc的配置: (1)继承WebMvcConfigurationSupport类 (2)实现WebMvcConfigurer接口 通过这两种方式完成的WebMvc配置存在差异,本文将对此作简单说明与区…

【Vue】单页应用程序介绍

通常基于Vue去开发一整个网站,开发出来的这整个网站应用,我们都会叫做单页应用程序 概念 单页应用程序:SPA【Single Page Application】是指所有的功能都在一个html页面上实现 我们可以将页面共用的部分封装成组件,底下要切换的也…

工具-金舟投屏软件: 手机如何投屏到电脑上 / Wi-Fi / USB

金舟安卓/iOS苹果投屏-正版软件下载中心 方法一、金舟投屏软件-wifi 1.1、准备工作 确保苹果手机和Windows电脑都连接到同一个Wi-Fi网络。 在Windows电脑上安装并打开金舟投屏软件。 1.2、操作步骤 在金舟投屏软件上选择“苹果手机投屏”功能。 在苹果手机上下滑屏幕&am…

New Work-flow of Circuit Bootstrapping

参考文献: [CGGI17] Chillotti I, Gama N, Georgieva M, et al. Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE. ASIACRYPT 2017 (1): 377-408.[CDKS21] Chen H, Dai W, Kim M, et al. Efficient homomorphic conversion be…