oracle 一次sql插入多条记录

本文介绍了在MySQL和Oracle数据库中批量插入数据的方法,并对比了两种数据库的不同写法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假如我有一个学生信息表,创建的表结构如下:

create table student(

id int primary key not null,

name varchar(10) not null)

熟悉MySQL数据库的可能知道,如果你想要批量插入一些数据,一条INSERT语句插入批量数据的写法为:

INSERT INTO [表名]([列名],[列名]) 

 VALUES([列值],[列值])),

VALUES([列值],[列值])),

VALUES([列值],[列值]));

即insert into student(id,name)

values(1,‘张三’),

values(2,‘李四');

 

可是这种写法在oracle中是不支持的,oracle中的用法如下:

insert all

into student(id,name) values(1,'张三')

into student(id,name) values(2,'李四')

select 1 from dual;

特别说明:dual是在oracle中创建的一个辅助表,你可以自主的新建成任意的表名,biao1,mytable都行

select 1 from dual这句话不能丢,会报语法错误,而且这句话的作用也仅仅是让sql语法正确。

 

### Oracle 数据库中一次插入多条记录的方法 在 Oracle 数据库中,有多种方法可以实现一次性的批量插入多行数据。一种较为简便的方式是在 `INSERT INTO` 语句之后跟随多个 `VALUES` 子句[^1]。 #### 使用单个 INSERT 语句带多个 VALUES 子句 这种方式允许在一个 SQL 命令里指定几组不同的值来完成多次的数据添加动作而不需要重复书写完整的插入命令: ```sql INSERT ALL INTO mytable (column1, column2, column3) VALUES ('val1', 'val2', 'val3') INTO mytable (column1, column2, column3) VALUES ('valA', 'valB', 'valC') SELECT * FROM dual; ``` 需要注意的是上述例子实际上利用了 `INSERT ALL` 结构,这并非严格意义上的单一 `INSERT...VALUES` 形式;真正的单个 `INSERT` 后接多个 `VALUES` 的形式如下所示,在某些版本的 Oracle 中支持这样的语法结构: ```sql INSERT INTO mytable (column1, column2, column3) VALUES ('val1','val2','val3'), ('valA','valB','valC'); ``` #### 利用 SELECT 和 UNION ALL 实现批量插入 另一种常见的做法是通过 `INSERT ... SELECT` 来结合 `UNION ALL` 构建源数据集并将其全部导入目标表内。这种方法特别适合当待插入数据已经存在于其他地方或者是可以通过查询逻辑产生的时候[^3]: ```sql INSERT INTO target_table(column_list) SELECT value_set_1 FROM DUAL UNION ALL SELECT value_set_2 FROM DUAL; ``` #### 多表无条件插入(Multi-table Unconditional Insert) 对于更加复杂的场景下可能涉及到向不止一张表同时执行插入操作,则可采用 `ALL INTO` 关键字来进行所谓的“多表无条件插入”。此功能使得能够基于同一个子查询的结果分别对不同表格实施独立却同步发生的插入行为[^2]: ```sql INSERT ALL WHEN condition THEN INTO table_name_1 (columns...) VALUES (expressions...) [WHEN other_condition THEN] INTO table_name_n (columns...) VALUES (expressions...) SELECT columns... FROM source_tables; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值