SQL-批量插入和批量更新
批量插入
表结构一样或类似
如果两张表的结构一样,例如一个表的结构和另一个表的结构一样,只是其中一张是临时表,而另一张表是存储数据的表,我们需要进行一次表的迁移的话,我们可以这样。
insert into tb1 需要的列名 select 按照前面写上需要的列名 from tb2
insert into tb1 * select * from tb2
或者
insert into tb1 id,name,address select id,name,address from tb2
普通的批量插入
如果对sql语句不熟悉,或者是持久层的框架,大部分是这么写的
INSERT INTO tb_test(ID,NAME) VALUES(1,'zhangsan');
INSERT INTO tb_test(ID,NAME) VALUES(2,'lisi');
INSERT INTO tb_test(ID,NAME) VALUES(3,'wangwu');
但是按照这种做法,我尝试了一下,一次插入2000条数据,大概需要2分钟,但是如果我们用union all,如下:
INSERT INTO tb_test(ID,NAME)
SELECT 4,'zhangsan'
UNION ALL
SELECT 5,'lisi'
UNION ALL
SELECT 6,'wangwu' ;
同样是2000条数据,union all 方法是12秒。第二种方法是先将我们要插入的数据总结成一张表,然后进行表插入,这样的效果明显是比一个一个的插入快的。
批量更新
我们知道我们跟新一般的跟着条件的,所以例如我们更新一个实体集合的话,我们也是一个一个的更新,同样,如果我们程序中利用for循环来批量更细的话,我们就得重复着,打开数据库,更新,关闭数据库,而且我们的大部分时间都是消耗在打开数据库,关闭数据库上边了,而且批量更新通常需要依据条件来判断更新哪条数据,但是一个sql中只能有一个where,所以union all显然是不行的。
但是我在以前的博客写过case when的写法,大家可以向一下,where就好像我们的if(条件)的“条件”,而他就好像我们的case 的when一样,所以我们可以用case when 来实现多“where”,这样的话就能实现多条记录更新的问题。代码如下:update tb_test SET name = 'zhangsan' case id
when '1' then 'yi'
when '2' then 'er'
when '3' then 'san'
end,
address='zhongguo' case sex
when '女' then 'femail'
when '男' then 'mail'
end
where *****
上边的语句就是当人们的名称是zhangsan的时候就批量更细id为汉语拼音,当人们的居住地址的时候就把他们的性别写成英文。
批量删除
在这里主要介绍下Sql批量插入的用法,让我们先看下批量删除一般如何来做。
1.批量删除很简单,大家可能都用过:
当用户在界面上不连续的选择多项进行删除时,该语句比循环调用多次删除或多条delete语句中间加分号一次调用等方法都高效的多。
SQL-批量插入和批量更新的更多相关文章
- spring data jpa开启批量插入、批量更新
spring data jpa开启批量插入.批量更新 原文链接:https://www.cnblogs.com/blog5277/p/10661096.html 原文作者:博客园--曲高终和寡 *** ...
- mybatis+mysql批量插入和批量更新、存在及更新
mybatis+mysql批量插入和批量更新 一.批量插入 批量插入数据使用的sql语句是: insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo, ...
- MongoDB与传统数据库的使用区别——批量插入与批量查询
我在百X知道上回答问题时经常遇到类似与这样的问题:MongoDB有没有像MySQL一样的ODBC驱动?MongoDB能不能像MySQL一样获取字段名称或类型. 我的回答是:不行,因为MongoDB不是 ...
- oracle 在xml中批量插入,批量修改及多组条件查询
最近公司用ibatis开发项目,本来可以用存储过程处理批量插入,批量修改及多组条件查询:但由于使用模块相对较小,暂时就在xml中配置,以前没有在xml做过类似处理,有必要记录一下:好了,代码如下: & ...
- MySQL 避免重复数据的批量插入与批量更新
[转发] 导读 我们在向数据库里批量插入数据的时候,会遇到要将原有主键或者unique索引所在记录更新的情况,而如果没有主键或者unique索引冲突的时候,直接执行插入操作. 这种情况下,有三种方式执 ...
- Mybatis 批量插入、批量更新
合理的使用批量插入.更新对性能优化有很大的作用,速度明显快了N倍. 要注意数据库连接串后面要新增:&allowMultiQueries=true,表示一个sql ...
- Mybatis批量插入、批量更新
合理的使用批量插入.更新对优化有很大的作用,速度明显快了N倍. 数据库连接串后面要新增:&allowMultiQueries=true 批量插入的最大限制主要是看你整条sql占用的大小,所以可 ...
- mybatis批量插入和批量更新
批量插入数据使用的sql语句是: insert into table (aa,bb,cc) values(xx,xx,xx),(oo,oo,oo) mybatis中mapper.xml的代码如下: & ...
- mybatis+mysql批量插入和批量更新
一.批量插入 批量插入数据使用的sql语句是: insert into table (字段一,字段二,字段三) values(xx,xx,xx),(oo,oo,oo) mybatis中mapper.x ...
- PHP框架 Laravel Eloquent ORM 批量插入数据 && 批量更新目前没有
foreach ($products as $v=>$a) { $count[] = array('product_name' => $a['name'], 'product_weight ...
随机推荐
- 模糊查询(like)
1. 找出名中包含 “厂”的所有供应商的名select * from provider where pro_name like '%厂%'2.第二个字为华select * from provider ...
- hystrix应用介绍(一)
声明:本文仅做个人的一次接口重构过程记录,期间参考了一些写的不错的博客,如果存在抄袭,请留言. hystrix基本介绍 hystrix 是一个开源的容灾框架,目的是为了解决当依赖服务出现故障或者接口响 ...
- Hibernate课程 初探一对多映射3-1 单向多对一简介
多对一的关系和关系数据库中的外键参照关系最匹配,即在己方的表中的一个外键参照另一个表中的主键! 通过在多方持有一方的引用来实现,需要在多的一方使用<many-to-one>来配置
- 最小白的webpack+react环境搭建
本文也同步发表在我的公众号“我的天空” 从零开始,用最少的配置.最少的代码.最少的依赖来搭建一个最简单的webpack+react环境. 最近在玩webpack+react+移动端,那么第一步自然是搭 ...
- Python函数(3)
一.装饰器 什么是装饰器,装饰器就是用于拓展原来函数功能的一种函数 装饰器就是用来为被装饰对象添加新功能的工具,装饰器本身可以是任意可调用对象,被装饰的对象也可以是任意可调用对象 装饰器遵循一个关键原 ...
- php session 存储到redis
PHP 的会话默认是以文件的形式存在的,可以配置到 NoSQL 中,即提高了访问速度,又能很好地实现会话共享,,,爽歪歪! 配置方式如下: 方法一:修改 php.ini 的设置 1 2 session ...
- angular2-搭建环境
npm 模块将被下载安装到[全局目录]中.[全局目录]通过 npm config set prefix "目录路径" 来设置.通过 npm config get prefix 来 ...
- u-boot分析(六)----时钟初始化
u-boot分析(六) 上篇博文我们按照210的启动流程,分析到了关闭看门狗,今天我们继续按照u-boot的启动流程进行分析,今天我们会主要分析时钟的初始化. 今天我们会用到的文档: 1. ...
- 创建Podspec 并且发布到github spec
昨天,花了点时间,把自己的代码做成framework,但是发现,每次迁移项目或者更新项目都是一件很头疼的事情,索性,也跟着时尚了一回,把所有代码都扔到git里面进行管理,通过cococapods直接安 ...
- centreon公司推出的check plugin pack
文档 http://documentation.centreon.com/docs/centreon-plugins/en/latest/ (epel) # yum install nagios-pl ...