当我们想要一次性插入多条数据时,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;
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐