数据库批量插入与更新

本文总结了数据库批量插入和更新的四种高效方法:insertselect用于快速插入数据;通过insertvalues字符串拼接实现大量数据一次性插入;updatewhencase适合小规模更新,但数据量大时效率降低;updateselect和临时表策略则适用于大规模更新,能有效提高执行速度。这些方法在处理大数据量时能显著提升数据库操作性能。
摘要由CSDN通过智能技术生成

引言

最近在做项目的时候总是会遇到需要批量插入数据和批量更新数据的时候,故将数据库批量插入与更新的几种方法结合案例总结下。

批量插入

方法一:insert select

有一次在项目中遇到了需要将一张表中的部分字段中的数据存入另一个表中,一开始不知道怎么做,以为是把所有的数据取出来,然后一条条存进去,后来觉得时间效率太慢了,看了看文档发现了有insert select 方法,可以插入某个表中的数据。

---语法
insert into
表名(列名1,列名2) 
select 列名1,列名2 
from 表名

方法二:insert values 字符串拼接

在后端中常常会有插入大量数据的情况,在这种情况下循环遍历insert values一条一条SQL语句进行执行效率会大大下降。例如执行一条insert values的时间为60ms,那么1000条数据就需要60s的时间,执行时间会随着数据的条数不断增长。所以我们就想要是只执行一次SQL语句那就好了,那么就可以采用字符串拼接的方式进行大批量数据插入。

---语法
insert into 
表名(列名1,列名2)  
values
(值1,值2),
(值1,值2),
(值1,值2),
(值1,值2)

批量更新

方法一:update when case

在网上看到最多的批量更新语法就是利用when case进行字符串拼接,这个方法在数据量不大的情况下效率很高,但是当数据量太大的时候就会导致SQL语句太长,导致SQL语句执行效率大大下降。

---语法 
update 表名 set 
列名1 =
	case id 
	when id值1 then 值1
    when id值2 then 值2
    end,
列名2 =
	case id
	when id值1 then 值1
	when id值2 then 值2
	end
where
	id in (id值1,id值2);

方法二:update select

有时候在业务中有需要将某张表中的数据,如果一条条取出来再进行update那会使得效率大大下降,数据库也提供了一个很方便的语句,就是使用update select 可以快速更新id值相同的值。

---语法
update 表1
set 
	表1.列1 = 表2.列1,
	表1.列2 = 表2.列2,
	表1.列3 = 表2.列3
from (select 列1,列2,列3) as 表2
where
	表1.id = 表2.id

方法三:临时表

有时候采用update case的方法会导致SQL语句太长,那么如果你拥有创建临时表的权限,你可以先创建一张临时表,然后将需要更新的数据插入进去,再利用update select的方法将数据大批量更新。

---创建临时表
create table *tmp(
id varchar(36),
name varchar(128)
)
---插入数据
insert into *tmp(id,name)
values
(值1,值2),
(值1,值2)
---更新数据
update 表1
set name = 表2.name
from (select id,name from *tmp) as 表2
where
	表1.id = 表2.id
---删除临时表
drop table *tmp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪蜀黍客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值