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 ...
随机推荐
- C语言函数调用简简介
1.函数的声明: 在编写程序时,首先要对函数进行声明,然后对函数进行定义: 函数的声明是要让编译器知道函数的名称.参数.返回值类型等信息: 函数的定义是要让编译器知道函数的功能: 函数声明的格式由函数 ...
- 从今天开始学习Swift--关于Swift (转)
WWDC2014推出了新的编程语言,大家都站在了新的起跑线上,希望转发的本文能对园内的朋友一点介绍和帮助,如果大家对swift感兴趣,欢迎踊跃利用google. 原文地址:http://www.coc ...
- vue中 eCharts 自适应容器
在 vue 脚手架开发中,echarts图表自适应容器的方法: 父组件: <template> <div class="statistics_wrap"> ...
- 模拟Chrome皮肤
话不多说,先验货: (原始状态) (最大化状态) (对比图) 为自己鼓掌!!! 哈哈,捣鼓2天终于把这个搞出来了!虽然代码一团糟,但是不难理解! 要实现这个功能需要几个组件:DWM,GDI+ 在实现这 ...
- HTML:::before和::after伪元素的用法
随笔 - 366 文章 - 0 评论 - 392 ::before和::after伪元素的用法 一.介绍 css3为了区分伪类和伪元素,伪元素采用双冒号写法. 常见伪类——:hover,:li ...
- 【Tim Sweeney】Why C++ for Unreal 4?
The first three generations of the Unreal Engine included a sandboxed scripting language, UnrealScri ...
- 创建React工程:React工程模板
这是本人初学React做的学习笔记;讲的不是很深,只算是简单的进行介绍. 这是一个小系列.都是在同一个模板中搭建的,但是代码是不能正常执行的. >>index.js <!DOCTYP ...
- 94. Binary Tree Inorder Traversal(inorder ) ***(to be continue)easy
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- linux 内存地址空间管理 mm_struct
http://blog.csdn.net/yusiguyuan/article/details/39520933 Linux对于内存的管理涉及到非常多的方面,这篇文章首先从对进程虚拟地址空间的管理说起 ...
- PHP防止SQL注入文件,引入即可
公司之前做的一个学校网站被黑客攻击并将漏洞公布于网络,其实黑客用的仅仅是一个叫WebCruiserEnt的软件就搞定了,数据库一目了然的呈现在了游客面前,用的就是常用的sql漏洞攻击,这里准备了一个文 ...