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语句中间加分号一次调用等方法都高效的多。
最新文章
- mono for android学习过程系列教程(4)
- 关于sharedPreferences的使用
- ajax实现文件上传
- vmdk虚拟机转换为OVF模板,导入esxi
- [0.1]Plan of kidsearch
- Nginx+Tomcat+Memcached实现tomcat集群和session共享
- 利用pscp命令实现linux与windows文件互传
- Python自然语言处理学习笔记之评价(evaluationd)
- span表情输入框 --- Author: rose &;&; lvyerose@163.com
- IntelliJ IDEA使用心得之插件篇
- [Codeforces]762F - Tree nesting
- springboot中配置过滤器以及可能出现的问题
- raid1 raid2 raid5 raid6 raid10的优缺点和做各自raid需要几块硬盘
- 花神的数论题(这题...哎。数位dp咋就这么 not naive 呢)
- PHP03
- windows基于vs2017的opencv安装
- 18 Issues in Current Deep Reinforcement Learning from ZhiHu
- 每天CSS学习之text-shadow
- 使用java5的注解和Sping/AspectJ的AOP 来实现Memcached的缓存
- 将textarea实现自适应高度及IE下滚动条不出现的bug
热门文章
- 多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
- Docker 清理命令汇总
- 内表转WORD
- constrained属性
- centreon公司推出的check plugin pack
- UESTC 1246 拆x3
- cocosBuilder生成cbbi文件,绑定到cocos2d-x
- vsftpd 启动 vsftpd:500 OOPS: bad bool value in config file for: guest_enable
- 模拟停车POJ(3505)
- How To Secure Nginx with Let's Encrypt on Ubuntu 14.04