MySQL数据库upsert使用

 本文翻译自:MySQL UPSERT - javatpoint,并附带自己的一些理解和使用经验.

MySQL UPSERT

UPSERT是数据库管理系统管理数据库的基本功能之一,它允许数据库操作语言在表中插入一条新的数据或更新已有的数据。UPSERT是一个原子操作,也就是说它是一个单步完成的操作。当UPSERT操作的是一条新数据时,会触发INSERT操作,若记录已经存在于表中,则UPSERT类似于UPDATE语句。

默认情况下,MySQL提供了ON DUPLICATE KEY UPDATE选项给INSERT语句来实现UPSERT功能。然而,INSERT还有一些其他选项来满足目标,比如INSERT IGNORE或REPLACE,我们将会学习并了解所有这些方案的细节。

MySQL UPSERT Example

我们可以通过以下三种方式来实现MySQL UPSERT操作:

  1. INSERT IGNORE
  2. REPLACE
  3. INSERT ON DUPLICATE KEY UPDATE

INSERT IGNORE

当我们向表中插入非法行时,INSERT IGNORE语句会忽略执行时的error。比如,主键列不允许我们存储重复值。当我们使用INSERT向表中插入一条数据,而这条数据的主键已经在表中存在了,此时MySQL服务器生成error,语句执行失败。然而,当我们使用INSERT IGNORE来执行此语句时,MySQL服务器将会生成warning而不是error。

当我们使用INSERT IGNORE批量插入数据时,产生了warning的行会被忽略,即不会被插入表中。

语法:

INSERT IGNORE INTO table_name (column_names)  
VALUES ( value_list), ( value_list) .....;  

例子:

先创建一张表,主键为id,同时还有一个唯一索引email,所以id,email 都不能重复,当插入的数据和这两个字段中的任意一个重复时,就会产生warning,从而使INSERT IGNORE忽略这条数据。

 向表中插入三条数据:现在我们执行下面语句:

可知,主键或唯一索引重复都会导致服务器报错,在执行批量插入时,一条语句报错会使整个批量插入无效。但当我们使用INSERT IGNORE时,主键或为一索引重复只会产生warning,同时,INSERT IGNORE会忽视这些产生的warning的行,将没有产生warning的行插入表中:

REPLACE

在某些情况下,我们希望更新已经存在的数据。此时可以使用REPLACE,当我们使用REPLACE命令时,可能会有下列两种情况发生:

  • 如果数据库中没有对应的记录,则执行标准的INSERT语句
  • 如果数据库中有对应的记录,则REPLACE语句会先删除数据库中的对应记录,再执行标准的INSERT语句(当主键或唯一索引重复时,会执行此更新操作)

在REPLACE语句中,更新数据分为两步,先删除原有记录,在插入要更新的记录。

语法:

REPLACE [INTO] table_name(column_list)  
VALUES(value_list);  

例子:

上面的代码中我们通过REPLACE操作两条数据,其中,第一条数据在数据库中没有与之冲突的主键或索引,所以执行插入操作,影响了1行数据;第二条数据与数据库中有主键冲突,所以会先删除数据库中原有数据,再将该数据插入数据库,以实现更新效果,删除一行、插入一行 ,影响了两行数据,所以此次操作一共影响了三行。

INSERT ON DUPLICATE KEY UPDATE

目前为止,我们已经看过两种UPSERT命令了,但它们都有一些限制。INSERT IGNORE只是简单忽略了duplicate error。REPLACE会检测INSERT error,但是它在添加新数据前会删除原有数据。因此,我们仍然需要一种更好的解决方案。

INSERT ON DUPLICATE KEY UPDATE是一个更好的解决方案,它不会删除重复的行,当我们在SQL语句中使用ON DUPLICATE KEY UPDATE子句并且有一行数据在主键或唯一索引上产生duplicate error时,会在已有的数据上做更新。

语法:

INSERT INTO table (column_names)  
VALUES (data)  
ON DUPLICATE KEY UPDATE   
column1 = expression, column2 = expression...;  

例子:

当使用INSERT ON DUPLICATE KEY UPDATE插入一条不存在的数据时,结果和INSERT一样:

主键冲突:

唯一索引冲突:

同时有多个唯一索引冲突或主键和唯一索引同时冲突时,一样会导致更新操作。

INSERT ON DUPLICATE KEY UPDATE批量插入:

insert into student ( id, name, email, city)
values
( 1, '小明', 'asasasasa', 'qw'),
( 1, '小王', 'asqww', qr'),
( 1, '小芳', 'asttyty', 'ds')
on duplicate key update
name = values(name),
city = values(city);

values(col_name)函数意思是,取出当前插入语句中col_name字段对应的值。values函数的参数是列名。

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

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

相关文章

git 远程名称 远程分支 介绍

原文: 开发者社区> 越前君> 细读 Git | 让你弄懂 origin、HEAD、FETCH_HEAD 相关内容 读书笔记:担心大佬文章搬家,故整理此学习笔记 远程名称(Remote Name) Origin 1、 origin 只是远程仓库的一个名称&#xff…

浅谈C++|类的继承篇

引子: 继承是面向对象三大特性之一、有些类与类之间存在特殊的关系,例如下图中: 我们发现,定义这些类时,下级别的成员除了拥有上一级的共性,还有自己的特性。 这个时候我们就可以考虑利用继承的技术,减少…

【Selenium】webdriver.ChromeOptions()官方文档参数

Google官方Chrome文档,在此记录一下 Chrome Flags for Tooling Many tools maintain a list of runtime flags for Chrome to configure the environment. This file is an attempt to document all chrome flags that are relevant to tools, automation, benchm…

竞赛 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来,疫情牵动着全国人民的心,一线医护工作者在最前线抗击疫情的同时,我们也可以看到很多科技行业和人工智能领域的从业者,也在贡献着他们的力量。近些天来,旷视、商汤、海康、百度都多家科技公司研…

红外检漏技术

SF6气体绝缘设备发生泄漏后会造成运行开关闭锁、 内部绝缘击穿, 泄漏到空气中会造成环境污染, 并严重危害现场人员安全。 再加之SF6气体成本高, 频繁补气, 使维护成本增加, 造成经济损失。 红外检漏是依据SF6气体对红外…

EasyUI combobox 实现搜索(模糊匹配)功能

很简单的一个下拉框搜索模糊匹配功能&#xff0c;在此记录&#xff1a; 1&#xff1a;页面实现&#xff1a; <select class"easyui-combobox" name"combobox" id"combobox" style"width:135px;height:25px;" headerValue"请选…

LeetCode142.环形链表-II

这道题和上一道题几乎没有任何区别啊&#xff0c;为什么还是中等难度&#xff0c;我用上一道题的解法一分钟就写出来了&#xff0c;只不过返回的不是true和false而是节点&#xff0c;以下是我的代码&#xff1a; public class Solution {public ListNode detectCycle(ListNode…

推荐一款负载均衡器,助你轻松管理多个 Socks5 代理

推荐一款负载均衡器&#xff0c;助你轻松管理多个 Socks5 代理。 推荐一个 GitHub 开源项目 mingcheng/socks5lb&#xff0c;该项目在 GitHub 有超过 400 Star&#xff0c;用一句话介绍该项目就是&#xff1a;“A simple socks5 proxy load balance and transparent proxy”&a…

1131. 绝对值表达式的最大值

1131. 绝对值表达式的最大值 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;求方向一次遍历两度统计 参考代码&#xff1a;求方向一次遍历两度统计 原题链接&#xff1a; 1131. 绝对值表达式的最大值 https://leetcode.cn/problems/maximum-of-absolute-val…

【CCF】第30次csp认证——202305-1重复局面

202305-1重复局面&#xff1a; 问题描述 国际象棋每一个局面可以用大小为 88 的字符数组来表示&#xff0c;其中每一位对应棋盘上的一个格子。六种棋子王、后、车、象、马、兵分别用字母 k、q、r、b、n、p 表示&#xff0c;其中大写字母对应白方、小写字母对应黑方。棋盘上无…

iOS开发之编译OpenSSL静态库

项目审查发现OpenSSL1.0.2d有漏洞&#xff0c;所以需要升级更新OpenSSL版本&#xff0c;借此机会&#xff0c;记录一下编译OpenSSL静态库的流程。 Xcode使用的是14.2&#xff0c;OpenSSL使用的是1.0.2u、1.1.1u&#xff0c;由于是对两个不同版本进行的编译操作&#xff0c;所以…

Linux下安装和使用MySQL的详细教程

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

js中如何获取当前页面的URL参数值?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 获取当前页面的URL参数值⭐ 解析查询字符串⭐ 使用正则表达式解析参数值⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&am…

LC142. 环形链表 II

题目大意 给你一个链表&#xff0c;要求判断是否有环&#xff0c;若有环&#xff0c;找出环的入口结点。 142. 环形链表 II 判断是否有环 判环比较简单&#xff0c;用一个一次走一个结点的快指针&#xff0c;和一个一次走一个结点的慢指针同时遍历链表&#xff0c;若两指针相…

第一颗国产 单/双端口 MIPI CSI/DSI 至 HDMI 1.4 发射器 芯片LT9611

1. 描述 LT9611 MIPI DSI/CSI 至 HDMI1.4 桥接器具有双端口 MIPI D-PHY 接收器前端配置&#xff0c;每个端口有 4 个数据通道&#xff0c;每个数据通道以 2Gbps 的速度工作&#xff0c;最大输入带宽为 16Gbps。 该桥接器提供一个 HDMI 数据输出&#xff0c;具有可选的 …

8位和32位单片机如何选择适合,以及主要区别!

单片机直接影响到项目的成功和性能&#xff0c;我们将分享如何选择适合您的应用的8位或32位单片机。 8位单片机 vs. 32位单片机&#xff1a; 一、性能和处理能力&#xff1a; 8位单片机&#xff1a; 8位单片机通常适用于相对简单的应用&#xff0c;如传感器控制、LED显示、小…

【论文笔记】Perception, Planning, Control, and Coordination for Autonomous Vehicles

单纯作为阅读笔记&#xff0c;文章内容可能有些混乱。 文章目录 1. Introduction2. Perception3. Planning3.1. Autonomous Vehicle Planning Systems3.2. Mission Planning3.3. Behavioral Planning3.4. Motion Planning3.4.1. Combinatorial Planning3.4.2. Sampling-Based P…

JavaWeb基础学习(5)

JavaWeb基础学习 一、Filter1.1 Filter介绍1.2 Filter快速入门1.3、Filter执行流程1.4、Filter使用细节1.5、Filter-案例-登陆验证 二、Listener2.1 Listener介绍2.2、ServletContextListener使用 三、AJAX3.1 AJAX介绍与概念3.2 AJAX快速入门3.3 Axios异步架构3.4 JSON-概述和…

[管理与领导-96]:IT基层管理者 - 扩展技能 - 5 - 职场丛林法则 -10- 七分做,三分讲,完整汇报工作的艺术

目录 前言&#xff1a; 一、汇报工作的重要性 1.1 汇报的重要性&#xff1a;汇报工作是工作重要的一环 1.2 向上司汇报工作状态具有重要的意义 1.2 汇报工作存在一些误解 1.3 汇报工作中的下错误做法 1.4 汇报工作与做实际工作的关系 二、工作汇报的内容与艺术 2.1 工…

Hugging Face使用Stable diffusion Diffusers Transformers Accelerate Pipelines

Diffusers A library that offers an implementation of various diffusion models, including text-to-image models. 提供不同扩散模型的实现的库&#xff0c;代码上最简洁&#xff0c;国内的问题是 huggingface 需要翻墙。 Transformers A Hugging Face library that pr…