博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql 中实现多条数据同时更新
阅读量:7135 次
发布时间:2019-06-28

本文共 1512 字,大约阅读时间需要 5 分钟。

   有时间我们需要对一张表进行批量数据的更新。首先我们想的是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)需要从原表中查询出来,一块更新。

转载于:https://www.cnblogs.com/prettrywork/p/7892320.html

你可能感兴趣的文章
Ext面板
查看>>
leverage准确翻译,译法,英文
查看>>
2013年9月1日下午
查看>>
Linux下编写 makefile 详细教程
查看>>
Python编码/文件读取/多线程
查看>>
nyoj------------找球号(一)
查看>>
Git SSH Key 生成步骤
查看>>
BI失败的原因
查看>>
eaccelerator 完全手册:配置、控制、API接口
查看>>
负载均衡--大型在线系统实现的关键(上篇)(再谈QQ游戏百万人在线的技术实现)...
查看>>
linux IO调度算法
查看>>
Android拦截外拨电话
查看>>
WPF让人哭笑不得的BUG
查看>>
Makefile学习笔记
查看>>
Linux服务器Cache占用过多内存导致系统内存不足问题的排查解决(续)
查看>>
ipad2 wifi ios7.x 1.0.1还是无法越狱
查看>>
EF架构~真正被封装的排序方法,支持多列排序
查看>>
线性表顺序存储
查看>>
Log--检查各数据库日志的使用情况
查看>>
小白学数据分析----->ARPPU的误区
查看>>