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

mysql 中实现多条数据同时更新的更多相关文章

  1. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  2. Oracle-创建新表,创建备份表,对表中插入多条数据

    一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...

  3. php实现只保留mysql中最新1000条记录

    这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  4. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

  5. mysql中插入多条记录-微软批处理

    当向mysql中插入大量数据时,可以使用微软的批处理方式.这样可以防止内存溢出又提高了效率.我写了一个mysql中插入多条记录的例子.赋值代码可以直接使用. 1.首先需要添加两个dll MySql.D ...

  6. mysql中timestamp的自动生成与更新

    转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:----------- ...

  7. 在Mysql中插入百万级别数据的方法

    首先,建立部门表和员工表: 部门表: create table dept( id int unsigned primary key auto_increment, deptno mediumint u ...

  8. 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录

    从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...

  9. 用一条mysql语句插入多条数据

    这篇文章主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助 假如有一个数据表A: id name title addtime 如果需要插入n条数 ...

随机推荐

  1. 关于Failed to check the status of the service com.taotao.service.ItemService. No provider available fo

    原文:http://www.bubuko.com/infodetail-2250226.html 项目中用dubbo发生: Failed to check the status of the serv ...

  2. 信号量Semaphore

    信号量说简单点就是为了线程同步,或者说是为了限制线程能运行的数量. 那它又是怎么限制线程的数量的哩?是因为它内部有个计数器,比如你想限制最多5个线程运行,那么这个计数器的值就会被设置成5,如果一个线程 ...

  3. C# WinForm开发系列 - Crystal Report水晶报表

    转自:ttp://www.cnblogs.com/peterzb/archive/2009/07/11/1521325.html 水晶报表(Crystal Report)是业内最专业.功能最强的报表系 ...

  4. Linux centos6.7网卡配置

    系统安装完成后 以此执行以下命令 相当于自动获取IP地址 setup命令——Network configuration———Device configuration———eth0 依次保存退出 实际上 ...

  5. 关于MySQL常用的查询语句

    一查询数值型数据: SELECT * FROM tb_name WHERE sum > 100; 查询谓词:>,=,<,<>,!=,!>,!<,=>,= ...

  6. Docker 创建 mongo 容器

    获取 docker 认证 mongo 镜像: docker pull mongo 创建运行 mongo 容器: docker run -d -it -p : --name mongo3 -m 512M ...

  7. lua与C/C++交互概要

    转 http://blog.csdn.net/wildfireli/article/details/22307635 Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常 ...

  8. new、override关键字

    1.如果我想彻底覆盖父类的方法,此时可以使用override .假有classB继承自classA,代码如下: public class B : A { public bool _flag; publ ...

  9. 【tmos】创建自定义400、500页面

    解决方案

  10. 常用linux命令总结

    Linux 版本 centos 1.查看Linux版本 uname -a 2.查看 ip 地址 ip addr 3.查看端口应用程序 netstat -lanp 如果输入上述命令,显示“-bash: ...