首页 > 其他分享 >10万条数据批量更新怎么做?

10万条数据批量更新怎么做?

时间:2023-06-09 15:13:21浏览次数:42  
标签:10 批量 into WHEN update 更新 万条 dr id

如果 10 万条数据进行批量更新该怎么操作呢?我们一起来看看具体可以怎么做。

mysql 批量更新如果一条条去更新效率是相当的慢, 循环一条一条的更新记录,一条记录update一次,这样性能很差,也很容易造成阻塞。

mysql 批量更新共有以下四种办法

1、.replace into 批量更新

replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');

 

2、insert into …on duplicate key update批量更新

insert into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y') on duplicate key update dr=values(dr);

 

3.创建临时表,先更新临时表,然后从临时表中update

create temporary table tmp(id int(4) primary key,dr varchar(50));
insert into tmp values  (0,'gone'), (1,'xx'),...(m,'yy');
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id;

注意:这种方法需要用户有 temporary 表的 create 权限。

 

4、使用 mysql 自带的语句构建批量更新

mysql 实现批量 可以用点小技巧来实现:

UPDATE tableName
    SET orderId = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END
WHERE id IN (1,2,3)

这句 sql 的意思是,更新 orderId 字段,如果id = 1 则 orderId 的值为 3,如果 id = 2 则 orderId 的值为 4……where 部分不影响代码的执行,但是会提高 sql 执行的效率。确保 sql 语句仅执行需要修改的行数,这里只有3条数据进行更新,而 where 子句确保只有 3 行数据执行。如果更新多个值的话,只需要稍加修改:

UPDATE categories 
    SET orderId = CASE id 
        WHEN 1 THEN 3 
        WHEN 2 THEN 4 
        WHEN 3 THEN 5 
    END, 
    title = CASE id 
        WHEN 1 THEN 'New Title 1'
        WHEN 2 THEN 'New Title 2'
        WHEN 3 THEN 'New Title 3'
    END
WHERE id IN (1,2,3)

到这里,已经完成一条 mysql 更新多条记录了。

根据我的测试,更新 100000 数据的性能就测试结果来看,测试当时使用replace into性能较好。

replace into 和 insert into on duplicate key update 不同在于:replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。insert into 则是只update重复记录,不会改变其它字段。

标签:10,批量,into,WHEN,update,更新,万条,dr,id
From: https://www.cnblogs.com/shujuyr/p/17469245.html

相关文章

  • win10 迁移 LTS 子系统 到非系统盘
    脚本下载LxRunOffline:https://github.com/DDoSolitary/LxRunOffline/releases脚本命令.\LxRunOffline.exelist#查看安装的子系统wsl--shutdown#中止所有运行的子系统.\LxRunOffline.exemove-nUbuntu-20.04-dE:\ubuntu20#将名为Ubuntu-20.04的子系统移动......
  • MariaDB 10.11 参数变化一览
    在MariaDB10.11中,有一些参数发生了变化,下面就一起来看一下。slowquery在mariadb10.11中,与慢查询相关的参数共13个,相比于mariadb10.6,有几个参数发生了变化。MariaDB[(none)]>showvariableslike'%slow%';+---------------------------------+------------------------......
  • PAT A1030 Travel Plan
    PATA1030TravelPlan dijkstra 优先队列实现 + dfs #include<iostream>#include<queue>#include<vector>#include<cstdio>#include<cstring>usingnamespacestd;constintMAXN=10000;constintINF=0x3f3f3f3f;structnode{ in......
  • python tkinter 动态批量建立Widget时,combobox 或 entry传递参数问题
    terminal_combobox.bind('<<ComboboxSelected>>',lambdaevent,arg=key_dict:self.terminal_select(key_dict=arg))#注意,传递参数方法defterminal_select(self,key_dict,*args):var=self.dict_widget[key_d......
  • 0010.有监督学习之K-均值聚类
    一、聚类分析概述1.簇的定义2.常用的聚类算法二、K-均值聚类算法1.K-均值算法的python实现1.1导入数据集1.2构建距离计算函数1.3编写自动生成随机质心的函数1.4编写K-Means聚类函数2.算法验证3.误差平方和SSE计算三、模型收敛稳定性探讨四、二分K-均值算法1......
  • nrf52832 P0.09 P0.10 脚位配置成普通GPIO 使用 //京鸿通信科技//www.kyohoon.com//1
    默认情况下P0.09和P0.10是作为NFC的引脚使用,要作为GPIO使用,要先将NFC功能除能,然后再配置成GPIO使用。SDK开发包中,已经对这个功能切换做了代码的封装,并提供了实现切换的宏,CONFIG_NFCT_PINS_AS_GPIOS。一、使用keil编译构建时,在keil中可以定义这个宏二、使用makefile......
  • 010 数据库学习笔记 日期 + 时间 + 星期
    星期获取操作--设置语言,这个很重要,会导致不同的返回结果(只需设置一次语言后,就可以重复调用DATENAME)SETLANGUAGEN'SimplifiedChinese'--简体中文--SETLANGUAGEN'English'--英文--SETLANGUAGEN'Korean'--韩文--获取指定日期为星期几GETDATE()当天日期,GETDATE(......
  • 【HMS Core】华为帐号服务,获取Access Token报错{sub_error:20152,error_description:inv
    ​ 【问题描述】华为账号服务,接口获取AccessToken报错:{sub_error:20152,error_description:invalidcode,error:1101} 【问题分析】根据官网提示,是code格式不正确造成的,需要检查参数配置​ 【解决方案】1、此问题解决方案,可以参考这篇帖子https://developer.huawei.com/......
  • win10 配置系统默认utf-8编码
      1、按win键,输入“区域与语言设置”2、选择管理语言设置3、在弹出框中选择更改系统区域设置4、勾选UnicodeUTF-8并点击确定和应用5、重启系统,验证结果  来源:https://www.cnblogs.com/walker-world/p/9548852.html......
  • 【HMS Core】华为帐号服务,获取Access Token报错{sub_error:20152,error_description:inv
     【问题描述】华为账号服务,接口获取AccessToken报错:{sub_error:20152,error_description:invalidcode,error:1101}【问题分析】根据官网提示,是code格式不正确造成的,需要检查参数配置【解决方案】1、此问题解决方案,可以参考这篇帖子https://developer.huawei.com/consumer/cn/forum/......