批量更新sql语句SQL-批量插⼊和批量更新
最新总是有⼈问我sql 优化的问题,⼤部分的原因就是更新实体集合或者更新,因为⽤的是持久化的框架,例如,EntityFrmwork ,所有这⾥我总结⼀下如何在中利⽤sql 进⾏批量的插⼊或者更新
批量插⼊
表结构⼀样或类似
如果两张表的结构⼀样,例如⼀个表的结构和另⼀个表的结构⼀样,只是其中⼀张是临时表,⽽另⼀张表是存储数据的表,我们需要进⾏⼀次表的迁移的话,我们可以这样。
insert into tb1 需要的列名 select 按照前⾯写上需要的列名 from tb2或者普通的批量插⼊
如果对sql 语句不熟悉,或者是持久层的框架,⼤部分是这么写的但是按照这种做法,我尝试了⼀下,⼀次插⼊2000条数据,⼤概需要2分钟,但是如果我们⽤union all ,如下:同样是2000条数据,union all ⽅法是12秒。第⼆种⽅法是先将我们要插⼊的数据总结成⼀张表,然后进⾏表插⼊,这样的效果明显是⽐⼀个⼀个的插⼊快的。
批量更新
我们知道我们跟新⼀般的跟着条件的,所以例如我们更新⼀个实体集合的话,我们也是⼀个⼀个的更新,同样,如果我们程序中利⽤for 循环来批量更细的话,我们就得重复着,打开数据库,更新,关闭数据库,⽽且我们的⼤部分时间都是消耗在打开数据库,关闭数据库上边了,⽽且批量更新通常需要依据条件来判断更新哪条数据,但是⼀个sql 中只能有⼀个where ,所以union all 显然是不⾏的。
但是我在以前的博客写过case when 的写法,⼤家可以向⼀下,where 就好像我们的if (条件)的“条件”,⽽他就好像我们的case 的when ⼀样,所以我们可以⽤case when 来实现多“where”,这样的话就能实现多条记录更新的问题。代码如下:上边的语句就是当⼈们的名称是zhangsan 的时候就批量更细id 为汉语拼⾳,当⼈们的居住地址的时候就把他们的性别写成英⽂。
批量删除
insert into tb1 * select * from tb2
1
insert into tb1 id,name,address select id,name,address from tb21INSERT 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');
1
2
3INSERT INTO tb_test(ID,NAME)SELECT 4,'zhangsan'UNION ALL SELECT 5,'lisi'UNION ALL SELECT 6,'wangwu' ;
1
2
3
4
5
6update 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 *****
1
2
3
4
5
6
7
8
9
10
在这⾥主要介绍下Sql批量插⼊的⽤法,让我们先看下批量删除⼀般如何来做。
1.批量删除很简单,⼤家可能都⽤过:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论