赞
踩
在我们实际的业务场景中,由于单条插入的效率很低(每次都需要数据库资源连接关闭的开销),故需要实现一次性插入多条数据,用以提升数据插入的效率;
如下图是常见的单条插入数据:
我这里以grade2表为例进行演示说明:
采用union all拼接查询方式实现一次向同一个表中插入多条数据语法:
- INSERT into 表名(字段名1,字段名2,字段名3,...)
- SELECT 值1,值2,值3,... from dual
- union all SELECT 值11,值21,值31,... from dual
- union all SELECT 值12,值22,值32,... from dual
- ...
示例(向同一个表同时插入6条不同内容的数据):
- INSERT into "grade2"("name","chinese","math","english")
- SELECT '张10',100,100,100 from dual
- union all SELECT '张20',101,101,101 from dual
- union all SELECT '张30',102,102,102 from dual
- union all SELECT '张40',103,103,103 from dual
- union all SELECT '张50',104,104,104 from dual
- union all SELECT '张60',105,105,105 from dual
采用insert all方式实现一次向同一个表中插入多条数据语法:
- insert all
- into 表名(字段名1,字段名2,字段名3,...) VALUES(值1,值2,值3,...)
- into 表名(字段名1,字段名2,字段名3,...) VALUES(值11,值21,值31,...)
- into 表名(字段名1,字段名2,字段名3,...) VALUES(值12,值22,值32,...)
- ...
- SELECT * from dual;
示例(向同一个表同时插入6条不同内容的数据):
- insert all
- into "grade2"("name","chinese","math","english") VALUES('张11',100,100,100)
- into "grade2"("name","chinese","math","english") VALUES('张21',101,101,101)
- into "grade2"("name","chinese","math","english") VALUES('张31',102,102,102)
- into "grade2"("name","chinese","math","english") VALUES('张41',103,103,103)
- into "grade2"("name","chinese","math","english") VALUES('张51',104,104,104)
- into "grade2"("name","chinese","math","english") VALUES('张61',105,105,105)
- SELECT * from dual;
insert all方式实现一次向多个表中插入多条数据语法:
- insert all
- into 表名1(字段名1,字段名2,字段名3,...) VALUES(值1,值2,值3,...)
- into 表名1(字段名1,字段名2,字段名3,...) VALUES(值11,值21,值31,...)
- into 表名1(字段名1,字段名2,字段名3,...) VALUES(值12,值22,值32,...)
- into 表名2(字段名1,字段名2,字段名3,...) VALUES(值1,值2,值3,...)
- into 表名2(字段名1,字段名2,字段名3,...) VALUES(值11,值21,值31,...)
- into 表名2(字段名1,字段名2,字段名3,...) VALUES(值12,值22,值32,...)
- into 表名3(字段名1,字段名2,字段名3,...) VALUES(值1,值2,值3,...)
- into 表名3(字段名1,字段名2,字段名3,...) VALUES(值11,值21,值31,...)
- into 表名3(字段名1,字段名2,字段名3,...) VALUES(值12,值22,值32,...)
- ...
- SELECT * from dual;
示例(向多个表同时插入6条不同内容的数据):
- insert all
- into "grade2"("name","chinese","math","english") VALUES('张11',100,100,100)
- into "grade2"("name","chinese","math","english") VALUES('张21',101,101,101)
- into "grade2"("name","chinese","math","english") VALUES('张31',102,102,102)
- into "grade"("id","name","course","score","sex","age") VALUES(11,'张11','语文',100,'男',26)
- into "grade"("id","name","course","score","sex","age") VALUES(12,'张21','数学',100,'男',26)
- into "grade"("id","name","course","score","sex","age") VALUES(13,'张31','英语',100,'男',26)
- SELECT * from dual;
注意:insert all语句里不能直接使用序列生成的值(因为即便每个into语句里都加上seq_test_insert.nextval也不会获得多个值):
- -- 创建序列
- create sequence seq_test_insert
- minvalue 1
- maxvalue 999999999999999999999999
- start with 1
- increment by 1
- cache 20;
-
- -- 获取下一个序列值
- SELECT seq_test_insert.nextval from dual;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。