MySQL批量更新的四种方式总结
直接update的弊端
最近做一个需求,更新3w条数据,一个一个update去更新的,结果花了80分钟,这样性能上很差,也容易阻塞,所以就找了一些MySQL批量更新的方式,在此记录一下
方法一;replace into
这种更新会将其它字段更新为默认值,因为它是先将重复记录删掉再更新,谨慎使用
replace into `user` (id,age) values (1,'2'),(2,'3'),(3,'4'),(4,'98'); -- > 时间: 0.038s
方法二:insert into [table] values… on duplicate key update
这种方式应该也是删掉记录,再更新,但是保存的原来的其它字段数据,所以其它字段不会改变
insert into `user`(id,age) values (1,'5'),(2,'7'),(3,'2'),(4,'198') on duplicate key update age=values(age) -- > > 时间: 0.017s
方法三:创建临时表
创建临时表,将更新数据插入临时表,再执行更新,需要有建表权限
DROP TABLE if EXISTS tmp; -- > 时间: 0.016s create temporary table tmp(id int(4) primary key,age varchar(50)); -- > 时间: 0.01s insert into tmp values (1,'13'), (2,'16'),(3,'18'),(4,'18'); -- > 时间: 0.009s update `user`, tmp set `user`.age=tmp.age where `user`.id=tmp.id; -- > 时间: 0.022s
方法四:使用MySQL自带批量更新语句
update `user` set age = CASE id WHEN 1 THEN '22' WHEN 2 THEN '22' WHEN 3 THEN '22' WHEN 4 THEN '22' END WHERE id IN(1,2,3,4); -- > 时间: 0.015s update (表名) set (更新字段) = case (被更新字段) when (被更新字段值) then (更新字段值)... end where (被更新字段) in((被更新字段值)...)
举例说明:set age = CASE id WHEN 1 THEN ‘22’
简单来说就是以id为查询条件,当id=1时更新age=22,where语句提高了sql的执行效率,先过滤需要修改的记录然后再更新。
总结
到此这篇关于MySQL批量更新的四种方式的文章就介绍到这了,更多相关MySQL批量更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
MySQL的从库Seconds_Behind_Master延迟总结
这篇文章主要介绍了MySQL的从库Seconds_Behind_Master延迟的相关资料,需要的朋友可以参考下2021-08-08mysql 5.7.17 安装配置方法图文教程(windows10)
这篇文章主要为大家分享了mysql 5.7.17 安装配置方法图文教程,具有一定的参考价值,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-01-01CentOS7.x卸载与安装MySQL5.7的操作过程及编码格式的修改方法
这篇文章主要介绍了CentOS7.x卸载与安装MySQL5.7的操作过程及编码格式的修改方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下2019-05-05MySQL之select、distinct、limit的使用
这篇文章主要介绍了MySQL之select、distinct、limit的使用,下面文章围绕select、distinct、limit的相关资料展开聚集内容,需要的朋友可以参考一下2021-11-11MySQL query_cache_type 参数与使用详解
这篇文章主要介绍了MySQL query_cache_type参数介绍,需要的朋友可以参考下2021-07-07
最新评论