• mysql 中实现多条数据同时更新


       有时间我们需要对一张表进行批量数据的更新。首先我们想的是update 语句。

       比如对一张订单表order_info 多条数据更新,

        update order_inifo

        set   order_code =case order_id

               when    1 then 'abc'

               when    2 then 'bcd'

              when    3 then 'cde'

                ........

               end,

               order_title=case order_id

            

              when    1 then '标题1'

              when    2 then '标题2'

              when    3 then  '标题3'

             ..........

             end

     when id in(1,2,3,..)

     这样实现多条数据 多个字段的更新,这样更新方式的条件是:

    根据表中的字段id在等于不同值时,更新字段 order_code,order_title. 

    更新成相应的数据,这些数据都是可以明确的。但有时间这些数据是存放在一个集合里面,‘abc’,'bcd','cde','标题1','标题2','标题3',就没法写在上面了。这需要

    遍历集合拿到相应的值,才能赋予对应的字段。由于 需要更新的字段 内容和id储藏在集合中,就没办法使用这样的sql语句了。有没有别的办法呢?

      我们可以使用replace into方法来实现更新,replace into类似于insert,insert是比较熟悉的,经常使用,就是向数据库中插入数据。replace into 也是向数据库中

    插入数据,不同的时,在插入数据时,数据库会根据主键或者唯一建(必须保证操作表中含有主键或者唯一建)判断表中是否已经含有对应的数据,如果没有直接插入,等同于insert,如有表中已经有对应的数据,那replace into就会根据主键或唯一建将该条数据delete掉,再做insert处理。

    这样的话,我们完全可以使用replace into批量更新表中的数据。

    <update id="upDateOrderInfo" parameterType="String" >
    REPLACE INTO order_info (
     order_code,
     order_company,
     order_statu,
     order_id,
    order_title 
     

    SELECT 
     a.order_code,
     a.order_company,
     a.order_statu,
     b.order_id ,

     b.order_title
     
    FROM
     (
       <foreach collection="datas" item="data" separator="union">
     SELECT 
        2 order_statu,
       '${data.order_id}' order_id,
       '${data.order_code}' order_log,
       '${data.order_company}' order_company
      </foreach>
       ) a,
     order_info b 
    WHERE a.order_id = b.order_id 
    </update>

    主键order_id和需要更新的字段order_code,order_company。都在集合中。通过replace into可以实现表的批量更新。值得注意的是:

    replace into在做update操作时,将原来的数据delete掉了,所有除了更新的字段,其他字段(order_title)需要从原表中查询出来,一块更新。



  • 相关阅读:
    Leetcode python 141. 环形链表
    leetcode python 387. 字符串中的第一个唯一字符 383. 赎金信 242. 有效的字母异位词
    leetcode python 566. 重塑矩阵 118. 杨辉三角
    leetcode python 350. 两个数组的交集 121. 买卖股票的最佳时机
    小程序常见的应用场景
    小程序基础入门
    高二数学必修4
    高二数学必修3(概率)
    高中3年数学知识梳理 & 成考 专升本 高数对比;
    高一数学必修1
  • 原文地址:https://www.cnblogs.com/prettrywork/p/7892320.html
Copyright © 2020-2023  润新知