Mysql批量更新数据
来源:互联网 发布:ae for mac破解版下载 编辑:程序博客网 时间:2024/05/17 07:36
方式一:使用for循环,进行一条条进行更新,但是这样更新数据的方式性能很差,也容易造成阻塞。
由于这种方式的缺点,很多人都会想到,用一条sql语句实现批量更新。
方式二:使用case when方式来实现批量更新
UPDATE mytable SET myfield = CASE id WHEN 1 THEN 'value' WHEN 2 THEN 'value' WHEN 3 THEN 'value' ENDWHERE id IN (1,2,3)
这种方式,更新数据库,将业务逻辑放在sql中,容易导致死锁。
demo:
<!-- case when --><update id="updateByBatchCaseWhen" parameterType="java.util.List">update T_ORDER<trim prefix="set" suffixOverrides=","><trim prefix="IO_TYPE = case" suffix="end,"><foreach collection="list" item="i" index="index"><if test="i.ioType!= null">when ref=#{i.ref} then #{i.ioType}</if></foreach></trim></trim>where<foreach collection="list" separator="or" item="i" index="index">REF=#{i.ref}</foreach></update>
方式三:replace into
replace into test_tbl (id,dr) values (1,'2'),(2,'3'),...(x,'y');
操作本质:对重复的记录先delete,后insert,如果更新的字段不全会将缺失的字段置为缺省值。
demo:
<!-- replace into --><update id="updateByBatchReplace" parameterType="java.util.List">replace into T_ORDER(ID,REF,IO_TYPE) values <foreach collection="list" separator="," item="i" index="index">(#{i.id},#{i.ref},#{i.ioType})</foreach></update>
方式四: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);操作本质:只update重复记录,不会改变其他字段
这种方式,要求有一个字段必须是主键或者唯一索引。
demo:
<!-- insert into ...on duplicate key update --><update id="updateByBatchDuplicate" parameterType="java.util.List">insert into T_ORDER (ID,REF,IO_TYPE) values <foreach collection="list" separator="," item="i" index="index">(#{i.id},#{i.ref},#{i.ioType})</foreach>on duplicate key update IO_TYPE=VALUES(IO_TYPE)</update>
方式五:创建临时表,先更新临时表,然后从临时表中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;创建临时表,太损耗性能,一般很少用。
总结:
性能测试结果图:
方式一测试结果图:单条记录更新
方式二测试结果图:case when
方式三测试结果图:replace into
方式四测试结果图:duplicate
经小编测试,前四种方式,性能最好的,要数方式四:insert into ...on duplicate key update。
阅读全文
0 0
- mysql批量更新数据
- Mysql批量更新数据
- Mysql批量更新数据
- Mysql批量更新数据
- MySQL 批量更新数据
- Mysql批量更新/插入数据
- mysql 批量update更新数据
- java Spring jdbcTemplate 批量更新数据 Mysql
- MySQL批量更新不同表中的数据
- mysql 批量更新临时表中的数据
- 使用 mysql 游标 批量更新数据
- MYSQL存储过程:批量更新数据
- PHP如何批量更新MYSQL中的数据
- mybatis笔记-mysql批量更新数据
- mysql批量更新表中数据
- Mysql根据条件批量更新动态数据
- mysql游标示例 mysql游标简易教程 mysql批量操作数据 mysql批量更新数据 mysql逐条更新数据
- 大批量更新数据mysql批量更新的四种方法
- 华为2018优招 解决方案技术工程师
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
- redis的安装和配置
- React路由
- Python基础语法之条件判断语句、循环
- Mysql批量更新数据
- c++11特性之initializer_list
- 4.2、配置java环境变量
- UVA11181Probability|Given
- 浅析 requestAnimationFrame
- hdu6069Counting Divisors(约数个数定理)
- xUtils的使用
- HPUOJ 小ho的01串
- Matlab新建struct结构体数组