MySQL 插入替换语句(replace into statement)

news2025/4/12 14:18:28

我们日常使用 insert into 语句向表中插入数据时,一定遇到过主键或唯一索引冲突的情况,MySQL的反应是报错并停止执行后续的语句,而replace into语句可以实现强制插入。

文章目录

  • 一、replace into 语句简介
    • 1.1 基本用法
    • 1.2 使用set语句
  • 二、注意事项
    • 2.1 替换时必须要有主键或唯一索引
    • 2.2 替换时无法引用旧行的数据

一、replace into 语句简介

insert into语句在插入数据时如果遇到主键或唯一键冲突时,其反应是报错并返回。而如果你想强制插入,即遇到键值冲突时使用最新的数据替换原数据,则可以用replace into来代替insert into语句。

1.1 基本用法

先创建一张测试表,并插入2条数据:

create table mytab(
id int not null auto_increment primary key,
source varchar(16),
value int default 999);

insert into mytab values(1, 'insert', 100),(2,'insert', 200);
table mytab;

在这里插入图片描述

下面用insert into语句插入2条数据,这里主键id=2出现了冲突,语句会执行失败:

insert into mytab values(2, 'insert', 200), (3, 'insert', 300);
table mytab;

在这里插入图片描述

将insert关键字替换为replace,当出现主键或唯一键冲突时,MySQL会先将表中冲突的数据删除,然后再插入,即隐式的帮你做了一个delete操作:

replace into mytab values(2, 'replace', 200), (3, 'replace', 300);
table mytab;

在这里插入图片描述
这里插入了2行数据,但是返回结果显示 3 rows affected,即是删除了1行,插入2行,共影响3行数据。同时Duplicates:1,显示有1行数据出现了重复。

1.2 使用set语句

replace into 还可以set语句用来指定每个列的值,这里更新id为1的行:

replace into mytab set id=1, source='set', value=101;
table mytab;

在这里插入图片描述

对于set中未指定的列,会被替换为默认值(这里不指定value的值,则其被设置成默认值999):

replace into mytab set id=1, source='set';
table mytab;

在这里插入图片描述

二、注意事项

2.1 替换时必须要有主键或唯一索引

replace into 发生替换时必须要检测到主键或唯一索引冲突,否则它的行为就和普通的insert into相同,我想把id为1的行value值设置为100,但仅引用source列,而通过source列无法判定冲突:

replace into mytab set source='set', value=100;
table mytab;

在这里插入图片描述
所以最终语句并没有像我预想的那样发生替换,而是插入了一行新数据。

2.2 替换时无法引用旧行的数据

如果我想在发生冲突时在原数据的基础上进行更新,这种场景replace into语句是无法做到的,因为在插入发生之前旧数据已经被删除了,所以是无法引用旧数据的,这里尝试将id=2的数据value值+1:

replace into mytab set id=2, source='plus 1', value=value+1;
table mytab;

在这里插入图片描述
可以看到最终结果并不是预想的201,而是1000。这是因为value=value+1,运算时无法引用旧值,而是引用了默认值。如果想实现冲突时在原数据上更新的效果,可以通过insert into … on duplcate key update语句实现。

最后提一句,replace into语句是MySQL对标准SQL的扩展,在其他RDBMS中可能并不适用。

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

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

相关文章

基于单片机的多功能热水器设计(论文+源码)

2.1系统方案设计 基于单片机的多功能热水器系统,其系统框图如图2.1所示。主要采用了DS18B20温度传感器,HC-SR04超声波模块,STC89C52单片机,液晶,继电器等来构成整个系统。硬件上主要通过温度传感器进行水温的检测&…

DeepSeek R1本地部署 DeepSeek Api接口调用 java go版本

1、本地ollama的API接口 接着上一章所本地部署deepseek,这一章我们调用ollama api 对应的curl: curl --request POST \--url http://localhost:11434/api/generate \--header Accept: */* \--header Accept-Encoding: gzip, deflate, br \--header Con…

基于SSM+uniapp的购药小程序+LW示例参考

1.项目介绍 系统角色:管理员、普通用户功能模块:用户管理、商家管理、药品管理、药品信息管理、发票管理、订单管理、收藏管理、购物车、充值、下单等技术选型:SSM,Vue(后端管理web),uniapp等测…

YOLO11网络结构以及改进1

YOLO11 1.YOLO11网络结构图在哪里?2.对应的网络结构图3.每一个模块详解3.1 Conv模块3.2关于卷积模块3.3 关于给各个模块指定参数的细节 4.加入CBAM 1.YOLO11网络结构图在哪里? 2.对应的网络结构图 3.每一个模块详解 3.1 Conv模块 位置:ultr…

AI 编程私有化部署,在使用 cline 时,可能无法避免私隐的泄漏问题

摘录:Cline Privacy Policy https://github.com/cline/cline/blob/main/docs/PRIVACY.md Key Points Cline operates entirely client-side as a VS Code extensionNo code or data is collected, stored, or transmitted to Clines servers 问题是&#xff1a…

计算机视觉-局部特征

一、局部特征 1.1全景拼接 先用RANSAC估计出变换,就可以拼接两张图片 ①提取特征 ②匹配特征 ③拼接图像 1.2 点的特征 怎么找到对应点?(才能做点对应关系RANSAC) :特征检测 我们希望找到的点具有的特征有什么特…

数据结构:Map Set(一)

目录 一、搜索树 1、概念 2、查找 3、插入 4、删除 二、搜索 1、概念及场景 2、模型 (1)纯key模型 (2)Key-Value模型 三、Map的使用 1、什么是Map? 2、Map的常用方法 (1)V put(K …

关闭浏览器安全dns解决访问速度慢的问题

谷歌浏览器加载速度突然变慢了?检查安全DNS功能(DoH)是否被默认开启。 谷歌浏览器在去年已经推出安全DNS功能(即DoH) , 启用此功能后可以通过加密的DNS增强网络连接安全性。例如查询请求被加密后网络运营商将无法嗅探用户访问的地址,因此对于增强用户的…

C语言-章节 4:函数的定义与声明 ——「神秘法术的卷轴」

少年和 Inta 成功通过运算符与表达式的考验后,继续在函数城堡中探索。他们沿着一条闪烁着幽光的走廊前行,走廊两侧的墙壁上刻满了奇异的符号,仿佛在诉说着古老的编程秘密。终于,他们来到了一间神秘的房间,房间中央悬浮…

47.实验室管理系统(基于SSM和html的Java项目)

目录 1.系统的受众说明 2.系统可行性分析 2.1 经济可行性 2.2 技术可行性 2.2.1 Java Web技术 2.2.2 Eclipse 2.2.3 Tomcat 2.2.4 数据库 2.2.5 Layui框架 2.2.6 SSM框架 3.系统需求分析 3.1 用户需求分析 3.2 功能需求分析 3.3 其他需求分析 4.系统设计 4.1 系…

【免费送书活动】《MySQL 9从入门到性能优化(视频教学版)》

本博主免费赠送读者3本书,书名为《MySQL 9从入门到性能优化(视频教学版)》。 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 这本书已经公开…

【人工智能】通过python练习机器学习中的8大算法

python一系列练习在前面几节中基本练习了一遍,本篇通过机器学习的算法加强python的训练。我印象中常用的几种算法有:线性回归、逻辑回归,决策树,向量机SVM,KNN-近邻,朴素贝叶斯,K-means&#xf…

Android Studio2024版本安装环境SDK、Gradle配置

一、软件版本,安装包附上 👉android-studio-2024.1.2.12-windows.exe👈 👉百度网盘Android Studio安装包👈 (若下载连链接失效可去百度网盘链接下载) 二、软件安装过程 ​ ​ ​ 三、准备运行…

RabbitMQ学习—day2—安装

目录 普通Linux安装 安装RabbitMQ 1、下载 2、安装 3. Web管理界面及授权操作 Docker 安装 强力推荐学docker,使用docker安装 普通Linux安装 安装RabbitMQ 1、下载 官网下载地址:https://www.rabbitmq.com/download.html(opens new window) 这…

Jenkins 新建配置Pipeline任务 三

Jenkins 新建配置Pipeline任务 三 一. 登录 Jenkins 网页输入 http://localhost:8080 输入账号、密码登录 一个没有创建任务的空 Jenkins 二. 创建 任务 图 NewItem 界面左上角 New Item 图NewItemSelect 1.Enter an item name:输入任务名 2.Select an ite…

社区版IDEA中配置TomCat(详细版)

文章目录 1、下载Smart TomCat2、配置TomCat3、运行代码 1、下载Smart TomCat 由于小编的是社区版,没有自带的tomcat server,所以在设置的插件里面搜索,安装第一个(注意:安装时一定要关闭外网,小编因为这个…

MATLAB 生成脉冲序列 pulstran函数使用详解

MATLAB 生成脉冲序列 pulstran函数使用详解 目录 前言 一、参数说明 二、示例一 三、示例二 总结 前言 MATLAB中的pulstran函数用于生成脉冲序列,支持连续或离散脉冲。该函数通过将原型脉冲延迟并相加,生成脉冲序列,适用于信号处理和系统…

概率论、组合数学知识点汇总

1、概率论知识点 全概率公式:如果事件B1,B2,…,Bn是样本空间的一个划分,则:贝叶斯定理:协方差:协方差用来衡量两个变量之间的变化趋势是否一致,公式为相关系数(Pearson)&#xff1a…

【人工智能】deepseek R1模型在蓝耘智算平台的搭建与机器学习的探索

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 蓝耘智算平台 deepseek R1简介与优点蓝耘智算平台蓝耘智算平台简介蓝耘智算平台优势deepseek R1模型在蓝耘智算平台的搭建模型使用与机器学习…

tomcat html乱码

web tomcat html中文乱码 将html文件改成jsp <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%>添加 <meta charset"UTF-8">