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