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)需要从原表中查询出来,一块更新。
mysql 中实现多条数据同时更新的更多相关文章
- 关于如何在mysql中插入一条数据后,返回这条数据的id
简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...
- Oracle-创建新表,创建备份表,对表中插入多条数据
一.创建新表 0.基本语法 create table 表名称(id varchar2(50) primary key ,name char(200) not null,phone number(11) ...
- php实现只保留mysql中最新1000条记录
这篇文章主要介绍了php实现只保留mysql中最新1000条记录的方法和相关示例及数据库结构,十分的全面,有需要的小伙伴可以参考下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...
- MYSQL中约束及修改数据表
MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括: NOT NULL(非空约束) PRIMARY KEY(主键约束) UNI ...
- mysql中插入多条记录-微软批处理
当向mysql中插入大量数据时,可以使用微软的批处理方式.这样可以防止内存溢出又提高了效率.我写了一个mysql中插入多条记录的例子.赋值代码可以直接使用. 1.首先需要添加两个dll MySql.D ...
- mysql中timestamp的自动生成与更新
转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样.1.自动UPDATE 和INSERT 到当前的时间:表:----------- ...
- 在Mysql中插入百万级别数据的方法
首先,建立部门表和员工表: 部门表: create table dept( id int unsigned primary key auto_increment, deptno mediumint u ...
- 复杂业务下向Mysql导入30万条数据代码优化的踩坑记录
从毕业到现在第一次接触到超过30万条数据导入MySQL的场景(有点low),就是在顺丰公司接入我司EMM产品时需要将AD中的员工数据导入MySQL中,因此楼主负责的模块connector就派上了用场. ...
- 用一条mysql语句插入多条数据
这篇文章主要介绍了在mysql中使用一条sql语句插入多条数据,效率非常高,但是原理其实很简单,希望对大家有所帮助 假如有一个数据表A: id name title addtime 如果需要插入n条数 ...
随机推荐
- 在SQL注入中利用MySQL隐形的类型转换绕过WAF检测
web应用一般采用基于表单的身份验证方式(页面雏形如下图所示),处理逻辑就是将表单中提交的用户名和密码传递到后台数据库去查询,并根据查询结果判断是否通过身份验证.对于LAMP架构的web应用而言,处理 ...
- c# 线程锁 ,
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace ...
- Coursera, Machine Learning, Unsupervised Learning, K-means, Dimentionality Reduction
Clustering K-means: 基本思想是先随机选择要分类数目的点,然后找出距离这些点最近的training data 着色,距离哪个点近就算哪种类型,再对每种分类算出平均值,把中心点移动到 ...
- F - Change FZU - 2277 (DFS序+线段树)
题目链接: F - Change FZU - 2277 题目大意: 题意: 给定一棵根为1, n个结点的树. 有q个操作,有两种不同的操作 (1) 1 v k x : a[v] += x, a[v ' ...
- mysql 案例 ~ insert插入慢的场景
一简介: insert出现慢日志中,应该怎么检测呢 二 理解:事务提交延迟,一般出现在写日志延迟的情况下,会有几种可能 场景: 1 RR模式下,insert等待gap lock锁导致的 ...
- neutron-----openstack网络操作
#查看子网 openstack subnet list #删除子网 openstack subnet delete name/id #查看网络 openstack network list #删除网络 ...
- P3168 [CQOI2015]任务查询系统
题目地址:P3168 [CQOI2015]任务查询系统 主席树的模板题 更模板的在这儿:P3834 [模板]可持久化线段树 1(主席树) 形象的说,P3834是"单点修改,区间查询" ...
- Linux今日疑问
问题一:who -r没有反应 ========== 首先我查询了运行等级的含义. 0: 关机 1: 单用户 2: 无网络的多用户 3: 命令行模式 4: 未用 5: GUI(图形桌面 模式) 6 : ...
- C实战:项目构建Make,Automake,CMake【转】
转自:https://blog.csdn.net/dc_726/article/details/48978849 版权声明:本文为博主原创文章,未经博主允许不得转载.欢迎访问 http://blog. ...
- boost 随机数发生器
Random 随机数 在很多应用中都需要使用随机数.本库力求提供一个高效的,通用的随机数库.boost库有多种随机数生成方式.先熟悉一下各种随机数生成器的概念. 数字生成器(Number Ge ...