mybatis 里 mysql高效率批量更新

本文详细介绍SQL批量更新数据的多种高效方法,包括使用CASE语句、MyBatis批量更新、创建临时表更新等策略,适用于不同场景下的数据更新需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,单条

UPDATE ho_house 
SET cn_name = CASE id 
WHEN 16 THEN 7.6 
WHEN 19 THEN 8.86 
WHEN 20 THEN 9 
END 
WHERE id IN (16,19,20)

2,多条

UPDATE ho_house
    SET cn_name = CASE cid 
        WHEN 1 THEN 'Name  1'
        WHEN 2 THEN 'Name  1'
        WHEN 3 THEN 'Name  1'
    END, 
        en_name = CASE cid 
        WHEN 1 THEN 'Name  1'
        WHEN 2 THEN 'Name  2'
        WHEN 3 THEN 'Name  3'
    END

WHERE cid IN (1,2,3) and pcate in (24,27,26) and ccate in (277,271,207)

...[多条件时直接: and 字段 in()]

3,mybatis  的多条   5000条用时 2分钟
    <!-- 高效率批量更新sql -->
 

	<update id="updateList" parameterType="java.util.List">
		UPDATE crm_online_form_detail SET
		field1 = CASE id
		<foreach collection="list" item="item">
			WHEN #{item.id} THEN #{item.field1}
		</foreach>
		END ,
		field2 = CASE id
		<foreach collection="list" item="item">
			WHEN #{item.id} THEN #{item.field2}
		</foreach>
		END ,
		field3 = CASE id
		<foreach collection="list" item="item">
			WHEN #{item.id} THEN #{item.field3}
		</foreach>
		END ,
		field4 = CASE id
		<foreach collection="list" item="item">
			WHEN #{item.id} THEN #{item.field4}
		</foreach>
		END
		WHERE id IN
		<foreach collection="list" item="item" open="(" separator="," close=")">
			#{item.id}
		</foreach>

	</update>

4,对比  另一种批量,实际还是生成单个sql一条一条更新的  5000条用时20分钟

 
    <!-- 批量更新sql -->
   

 <update id="updateList" parameterType="java.util.List">
       <foreach collection="list" index="index" item="e" >  
            UPDATE ho_house SET     
                code = #{e.code},
                cn_name = #{e.cnName},
                en_name = #{e.enName},
                actual_name = #{e.actualName},
                update_date = #{e.updateDate},
                update_by = #{e.updateBy.id} 
            WHERE id = #{e.id} ;
        </foreach>  
    </update> 

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

create tem 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; 



参考 : https://blog.youkuaiyun.com/zl570932980/article/details/72468875 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你好龙卷风!!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值