Oracle数据库一次插入多条数据-----insert all方法

本文介绍了如何在MySQL和Oracle中优化批量数据插入,通过创建序列、触发器避免频繁查询,显著提升插入效率。重点讲解了Oracle中利用触发器自动设置主键ID和MySQL的insertall语句应用实例。
摘要由CSDN通过智能技术生成

当我们想要一次性插入多条数据时,MySQL和Oracle是有区别的。

MySQL

MySQL一次性插入多条数据参考如下:
https://blog.csdn.net/weixin_45137708/article/details/120866268

Oracle

常用的插入数据的方法id是采用sequence自增,每次循环,都会查询一次sequence,然后插入一条数据,这就导致性能极低。通过改成一次插入多条数据,id通过触发器自动设置,不再每次先查询sequence,这样效率可以提高很多。

由于insert all方式插入多条数据时,通过sequence获取的值是同一个,不会自动获取多个,所以id需要通过其他方式设置(这里采用触发器方式自动设置id)

步骤如下:
1.创建表
id为主键,通过sequence产生主键值。

create table student(
       id number(10) primary key,
       name varchar2(30),
       age number(10),
       address varchar2(50)
)

2.创建序列

create sequence seq_student 
minvalue 1
maxvalue 999999999999999999999999
start with 1
increment by 1
cache 20;   //指定存入缓存序列值的个数,默认值20

3.创建触发器
通过触发器自动给insert语句设置id

create or replace trigger tr_student
before insert on student
for each row
begin
  select seq_student.nextval into :new.data_id from dual;
end;  

4.插入数据

insert all 
into student(name,age,address) values('lily',23,'北京')
into student(name,age,address) values('Tom',32,'上海')
into student(name,age,address) values('Jim',18,'重庆')
select * from dual;

这样就比单条插入数据高效很多。

需要注意的是,在insert all语句里不能直接使用seq_test_insert.nextval,因为即便每个into语句里都加上seq_test_insert.nextval也不会获得多个值。

5.insert all支持往不同的表里插入数据

insert all 
into table1(filed1,filed2)values('value1','value2')
into table2(字段1,字段2,字段3) values(1,值2,值3)
select * from dual;

6.最后查看数据

select * from student;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值