MySQL中的批量更新实战

MySQL中的批量更新实战

表结构

mysql> desc dept;
+--------+-------------+------+-----+---------+----------------+
| Field  | Type        | Null | Key | Default | Extra          |
+--------+-------------+------+-----+---------+----------------+
| deptno | int(11)     | NO   | PRI | NULL    | auto_increment |
| dname  | varchar(10) | YES  |     | NULL    |                |
| loc    | varchar(50) | YES  |     | NULL    |                |
+--------+-------------+------+-----+---------+----------------+
3 rows in set (0.27 sec)

原始数据

mysql> select * from dept;
+--------+--------+------+
| deptno | dname  | loc  |
+--------+--------+------+
|      1 | 开发部 | 北京 |
|      2 | 测试部 | 上海 |
|      3 | 市场部 | 广州 |
|      4 | 运营部 | 杭州 |
+--------+--------+------+
4 rows in set (0.06 sec)

方法1:replace into

流程

  1. 尝试将新行插入表中
  2. 如果插入时报冲突(主键或者唯一键),则删除冲突的老数据
  3. 将新数据插入表中

实战

mysql> REPLACE into dept (deptno,dname) values (1,'开发'),(2,'测试');
Query OK, 4 rows affected (0.08 sec)
Records: 2  Duplicates: 2  Warnings: 0

从4 rows affected这里我们可以看出原来的2行被删除了,新的2行比插入了,总共影响了4行数据

mysql> select * from dept;
+--------+--------+------+
| deptno | dname  | loc  |
+--------+--------+------+
|      1 | 开发   | NULL |
|      2 | 测试   | NULL |
|      3 | 市场部 | 广州 |
|      4 | 运营部 | 杭州 |
+--------+--------+------+
4 rows in set (0.06 sec)

注意

replace into语义与insert into类似,都是往表中插入数据,如果没有列没有指定则按照默认值处理,在使用replace into做批量更新时一定要注意,要全字段更新

方法2:insert into [table] values… on duplicate key update

mysql> insert into dept (deptno,dname) values(3,'市场'),(4,'运营') on duplicate key update dname = values(dname);
Query OK, 4 rows affected (0.23 sec)
Records: 2  Duplicates: 2  Warnings: 0
mysql> select * from dept;
+--------+-------+------+
| deptno | dname | loc  |
+--------+-------+------+
|      1 | 开发  | NULL |
|      2 | 测试  | NULL |
|      3 | 市场  | 广州 |
|      4 | 运营  | 杭州 |
+--------+-------+------+
4 rows in set (0.08 sec)

流程

  1. 尝试往表中插入数据
  2. 如果冲突就更新指定的列

细节

INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;

如果只有a列是唯一的,数据库中存在a=1的行,则该条sql语句相当于

UPDATE table SET c=c+1 WHERE a=1;

如果a列和b列都是唯一的,且表里存在a = 1的行和b=2的行,则该sql相当于

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

表中有多个字段唯一时,用insert into [table] values… on duplicate key update就要留意

方法4:MySQL自带批量更新语句

mysql> update dept set 
dname = case when deptno = 1 then '开发部' else dname end,
loc = case when deptno = 1 then '北京' else loc end,
dname = case when deptno = 2 then '测试部' else dname end,
loc = case when deptno = 2 then '上海' else loc end
where deptno in(1,2);
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2  Changed: 2  Warnings: 0

说明

  1. 从数据库中筛选出deptno = 1和deptno = 2的数据
  2. 当deptno = 1时将dname改为开发部否则还用原先的dname,deptno = 1时将loc改为北京,否则用原先的loc,deptno=2时同理
mysql> select * from dept;
+--------+--------+------+
| deptno | dname  | loc  |
+--------+--------+------+
|      1 | 开发部 | 北京 |
|      2 | 测试部 | 上海 |
|      3 | 市场   | 广州 |
|      4 | 运营   | 杭州 |
+--------+--------+------+
4 rows in set (0.10 sec)

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

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

相关文章

第二代增强-采购订单抬头子屏幕增强

文章目录 第二代增强-采购订单抬头子屏幕增强需求查找增强点创建项目增强子屏幕定义全局变量编写出口函数代码激活增强运行结果查看创建的采购订单底表数据 第二代增强-采购订单抬头子屏幕增强 需求 查找增强点 创建项目 增强子屏幕 定义全局变量 *&---------------------…

读书笔记——《高质量C++/C编程指南》(2)

目录 前言 命名规则 共性规则 简单的Windows应用程序命名规则 表达式和基本语句 运算符优先级 复合表达式 if语句 布尔变量与零值比较 整型变量与零值比较 浮点变量与零值比较 指针变量与零值比较 对if 语句的补充说明 循环语句的效率 for 语句的循环控制变量 s…

自动驾驶中常见坐标系极其转换

各个传感器坐标系 相机坐标系统 摄像头的作用是把三维世界中的形状、颜色信息,压缩到一张二维图像上。基于摄像头的感知算法则是从二维图像中提取并还原三维世界中的元素和信息,如车道线,车辆、行人等,并计算他们与自己的相对位置。 感知算法和相机相关的坐标系有图像坐…

Pandas进阶

文章目录 第1关:Pandas 分组聚合第2关:Pandas 创建透视表和交叉表 第1关:Pandas 分组聚合 编程要求 使用 Pandas 中的 read_csv() 函数读取 step1/drinks.csv 中的数据,数据的列名如下表所示,请根据 continent 分组并…

MySQL-ELK基础

1:什么是 ELK ELK是由一家elastic公司开发的三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。三个项目各有不同的功能,之后又增加了许多新项目, 于是 从5.X版本后改名为Elastic Stack Elastic S…

【JavaScript】内置对象 - Date 日期对象 ④ ( 制作倒计时页面 )

文章目录 一、倒计时页面实现1、需求分析2、计算秒数3、计算倒计时时间的 天 / 时 / 分 / 秒4、页面中显示倒计时时间 二、完整代码示例1、完整代码2、执行结果 Date 日期对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Da…

晨华城乡社区网格化建设实施

一、目标任务 开展社会服务网格化管理工作的目标是为了实现基层社会治理管理体系全覆盖。全面形成指挥有力、协调顺畅、运转高效的运行体系,普遍建立覆盖城乡、行为规范、富有活力的组织网络,建立健全服务民生、维护稳定、推动发展的制度机制&#xff0…

速卖通商品评论API(aliexpress.item_review)返回值全解析

在电商领域,用户评论对于产品的推广和销售具有极其重要的影响。速卖通(AliExpress)作为全球知名的跨境电商平台,提供了丰富的API接口供开发者使用,其中aliexpress.item_review API允许开发者获取商品的评论信息。本文将…

品质为王:高效溶解性鱼油胶囊的软胶囊弹性硬度测试解析

品质为王:高效溶解性鱼油胶囊的软胶囊弹性硬度测试解析 在当今的健康产品市场中,高效溶解性鱼油胶囊以其独特的营养价值和吸收效率赢得了众多消费者的青睐。然而,要想在激烈的市场竞争中脱颖而出,产品的品质保证至关重要。其中&a…

关于Kubernetes介绍及使用

Kubernetes简介及使用 Kubernetes(简称K8s),是Google开源的容器编排平台,用于管理和自动化容器化应用的部署、扩展和运行。它最初由Google工程师开发,并于2015年捐赠给云原生计算基金会(CNCF)。…

深入理解WPF的ResourceDictionary

深入理解WPF的ResourceDictionary 介绍 在WPF中,ResourceDictionary用于集中管理和共享资源(如样式、模板、颜色等),从而实现资源的重用和统一管理。本文详细介绍了ResourceDictionary的定义、使用和合并方法。 定义和用法 Res…

鸿蒙内核源码分析(信号消费篇) | 谁让CPU连续四次换栈运行

本篇有相当的难度,涉及用户栈和内核栈的两轮切换,CPU四次换栈,寄存器改值,将围绕下图来说明. 解读 为本篇理解方便,把图做简化标签说明: user:用户空间kernel:内核空间source(…):源函数sighandle(…):信号处理函数&a…

【操作系统】进程与线程概念基础知识

进程与线程概念基础知识 进程进程的概念进程控制块进程状态进程三状态模型挂起进程模模型进程的上下文切换进程控制 线程为什么引入线程线程的概念线程与进程的比较线程的上下文切换线程的实现 进程 进程的概念 1. 进程的定义: 进程是指一个具有一定独立功能的程序…

【面试干货】http请求报文的组成与作用?

【面试干货】http请求报文的组成与作用? 一、http 的请求报文组成二、请求行(Request Line)三、请求头部(Request Headers)四、请求体(Request Body)五、响应头部 (Response Headers…

iframe的基本用法

一、背景 在web页面开发中,有时会遇到在一个应用A的页面中引用应用B的页面,此时就需要在应用A中使用iframe嵌入引用B的页面了,比如多租户的web应用,或者门户系统的智能客服助手弹框应用,博主也是在做通用智能客服应用的过程中用到了iframe。网络上有关iframe的信息虽然很…

2024.04.19校招 实习 内推 面经

绿*泡*泡VX: neituijunsir 交流*裙 ,内推/实习/校招汇总表格 1、校招&转正实习 | 美团无人机业务部招聘(内推) 校招&转正实习 | 美团无人机业务部招聘(内推) 2、校招&实习 | 快手 这些岗位…

Terraform模块重构

本节介绍的通过moved块进行模块重构的功能是从Terraform v1.1开始被引入的,如果要在之前的版本进行这样的操作,必须通过terraform state mv命令来完成。 对一些旨在被人复用的老模块来说,最初的模块结构和资源名称可能会逐渐变得不再合适。例…

银河麒麟桌面版开机后网络无法自动链接 麒麟系统开机没有连接ens33

1.每次虚拟机开机启动麒麟操作系统,都要输入账号,密码。 进入点击这个ens33 内网才连接 2. 如何开机就脸上呢? 2.1. 进入 cd /etc/sysconfig/network-scripts 2.2 修改参数 onbootyes 改为yes 2.3 重启即可 a. 直接重启机器查看是否正常&…

工程伦理课堂记录

文章目录 0. 导论0.1 工程伦理教育的意义0.2 工程伦理教育要实现的目标 1. 工程与伦理1.1 工程伦理学科的产生1.2 工程和技术1.3 工程概念的理解演进1.4 工程的过程1.5 工程的特点1.6 工程活动的七个维度总结 2. 伦理2.1 道德伦理的概念2.2 道德伦理的关系2.3 伦理规范2.4 伦理…

【吃透Java手写】2-Spring(下)-AOP-事务及传播原理

【吃透Java手写】Spring(下)AOP-事务及传播原理 6 AOP模拟实现6.1 AOP工作流程6.2 定义dao接口与实现类6.3 初始化后逻辑6.4 原生Spring的方法6.4.1 实现类6.4.2 定义通知类,定义切入点表达式、配置切面6.4.3 在配置类中进行Spring注解包扫描…