mysql update更新,一次还是多次快?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql update更新,一次还是多次快?相关的知识,希望对你有一定的参考价值。

就是 比如我有一个数组,
我是foreach循环去更新每个主键
还是 update from table where id=1 or id=2 or id=3 类似这样?

哪个比较可取?
好像说用 in,on 多了的话影响速度?

比如查询都用union all这样比较好

update table set 字段=值 where id in (1,2,3,...);这是我一般的写法,一般如果在一条语句能完成的情况下,尽量一次过,除非数据量大则另说了. 参考技术A 可以更新多列,例如:
update
表名
set
字段1=值1,字段2=值2
where
....

mybatis 批量更新update详解

通常如果需要一次更新多条数据有两个方式,(1)在业务代码中循环遍历逐条更新。(2)一次性更新所有数据

1 批量更新不同的值 不同的条件

MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

 UPDATE brand
    SET name = CASE id 
        WHEN 1 THEN 'name1'
        WHEN 2 THEN 'name2'
        WHEN 3 THEN 'name3'
    END, 
    address = CASE id 
        WHEN 1 THEN '地址1'
        WHEN 2 THEN '地址2'
        WHEN 3 THEN '地址3'
    END
WHERE id IN (1,2,3)

这条sql的意思是,如果id为1,则name的值为name1,address 的值为地址1;依此类推。

<update id="updatebrandList" parameterType="list">
    update brand
    <trim prefix="set" suffixOverrides=",">
    
        <trim prefix="name=case" suffix="end,">
            <foreach collection="list" item="item" index="index">
                <if test="item.name!=null">
                    when id=#item.id then #item.name
                </if>
            </foreach>
        </trim>
        
        <trim prefix="address =case" suffix="end,">
            <foreach collection="list" item="item" index="index">
                <if test="item.title!=null">
                    when id=#item.id then #item.address
                </if>
            </foreach>
        </trim>
    </trim>
    where
    <foreach collection="list" separator="or" item="item" index="index">
        id=#item.id
    </foreach>
</update>

2 foreach成多条sql

这种方式最简单,就是用foreach组装成多条update语句,但Mybatis映射文件中的sql语句默认是不支持以" ; " 结尾的,也就是不支持多条sql语句的执行。所以需要在连接mysql的url上加 &allowMultiQueries=true 这个才可以执行。

<update id="updateBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update tableName
        <set>
            name=$item.name,
            name2=$item.name2
        </set>
        where id = $item.id
    </foreach>      
</update>

3 批量更新逐条更新

逐条更新这种方式显然是最简单,也最不容易出错的,即便出错也只是影响到当条出错的数据,而且可以对每条数据都比较可控,更新失败或成功,从什么内容更新到什么内容,都可以在逻辑代码中获取,

这种方式最大的问题就是效率问题,逐条更新,每次都会连接数据库,然后更新,再释放连接资源(虽然通过连接池可以将频繁连接数据的效率大大提高,抗不住数据量大),这中损耗在数据量较大的时候便会体现出效率问题

以上是关于mysql update更新,一次还是多次快?的主要内容,如果未能解决你的问题,请参考以下文章

mybatis update返回值

防止 MySQL 行一次更新两次? (nodejs mysql)

sql UPDATE,一个计算用了多次,能不能只计算一次?

MVC2 一次异步调用,多次异步更新

update出现部分字段没有更新?

Access中UPDATE语句一次更新多个数据