MySQL和Oracle批量插入SQL的通用写法示例


Posted in MySQL onNovember 17, 2021

举个例子:

现在要批量新增User对象到数据库USER表中

public class User{
    //姓名
    private String name;
    //年龄
    private Integer age;
    //性别
    private Integer sex
}

大部分人对MySQL比较熟悉,可能觉得批量新增的SQL都是这样写,其实并不然。该写法在MySQL中没问题,而在Oracle中,这样写就会报错。

MySQL写法:

INSERT INTO USER 
    (NAME,AGE,SEX)
VALUES
('val1_1', 'val1_2', 'val1_3'),
('val2_1', 'val2_2', 'val2_3'),
('val3_1', 'val3_2', 'val3_3');

Oracle写法:

//多次单条插入
INSERT INTO USER (NAME,AGE,SEX) VALUES ('val1_1', 'val1_2', 'val1_3');
INSERT INTO USER (NAME,AGE,SEX) VALUES ('val2_1', 'val2_2', 'val2_3');
INSERT INTO USER (NAME,AGE,SEX) VALUES ('val3_1', 'val3_2', 'val3_3');

//批量插入
INSERT ALL
   INTO USER (NAME,AGE,SEX) VALUES ('val1_1', 'val1_2', 'val1_3')
   INTO USER (NAME,AGE,SEX) VALUES ('val2_1', 'val2_2', 'val2_3')
   INTO USER (NAME,AGE,SEX) VALUES ('val3_1', 'val3_2', 'val3_3')
SELECT 1 FROM DUAL;

可以发现Oracle的两种写法都比较的麻烦,批量插入也压根没有减少插入的列名。除此之外,另一个麻烦的事情就是,在企业开发中,一套软件系统可能需要支持多套数据库的,因此这条新增的操作,就得适配两套数据库,维护两套SQL,大大地增加了开发成本。

那么有没有一种通用的写法呢?答案是有的。

通用写法:

INSERT INTO USER (NAME,AGE,SEX)
    select ('val1_1', 'val1_2', 'val1_3') from dual union all
    select ('val2_1', 'val2_2', 'val2_3') from dual union all
    select ('val3_1', 'val3_2', 'val3_3') from dual

这样一来,既简单又能少维护一套SQL,两全其美。

下面是XML文件里各种写法的代码。

<!--MySQL的批量插入-->
<insert id="batchInsertUser" databaseId="mysql">
   INSERT INTO USER 
            (NAME,AGE,SEX)
   VALUES
    <foreach collection="userList" index="index" item="user" separator=",">
            (#{user.name},#{user.age},#{user.sex})
  </foreach>
</insert>
<!--Oracle的批量插入-->
<insert id="batchInsertUser" databaseId="oracle">
  BEGIN
  <foreach collection="userList" index="index" item="user" separator=";">
   INSERT INTO USER 
            (NAME,AGE,SEX)
   VALUES
            (#{user.name},#{user.age},#{user.sex})
  </foreach>
  ;END;
</insert>

仔细观察MySQL和Oracle的写法,因为MySQL支持上述在VALUES后面直接插入多条数据,因此。foreach标签只需要循环遍历出VALUES后面()里的内容即可;而Oracle因为不支持这种写法因此需要循环遍历整个INSERT语句。

<!--通用的批量插入-->
<insert id="batchInsertUser" databaseId="mysql">
   INSERT INTO USER 
            (NAME,AGE,SEX)
  <foreach collection="userList" index="index" item="user" separator="union all">
     SELECT
            (#{user.name},#{user.age},#{user.sex})
     FROM DUAL
  </foreach>
</insert>

总结

到此这篇关于MySQL和Oracle批量插入SQL的通用写法的文章就介绍到这了,更多相关MySQL和Oracle批量插入SQL内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 8.0 之不可见列的基本操作
May 20 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
MySQL中InnoDB存储引擎的锁的基本使用教程
May 26 MySQL
MySQL 8.0 Online DDL快速加列的相关总结
Jun 02 MySQL
Mysql中存储引擎的区别及比较
Jun 04 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
Nebula Graph解决风控业务实践
Mar 31 MySQL
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
Apr 12 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL安装失败的原因及解决步骤
Jun 14 MySQL
MySQL 原理优化之Group By的优化技巧
Aug 14 MySQL
SQL 聚合、分组和排序
Nov 11 #MySQL
SQL基础的查询语句
Nov 11 #MySQL
MySQL之select、distinct、limit的使用
Nov 11 #MySQL
MySQL表类型 存储引擎 的选择
Nov 11 #MySQL
一文带你探究MySQL中的NULL
Nov 11 #MySQL
mysql函数全面总结
Nov 11 #MySQL
MYSQL 运算符总结
Nov 11 #MySQL
You might like
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
利用js的Node遍历找到repeater的一个字段实例介绍
2013/04/25 Javascript
javascript进行数组追加方法小结
2014/06/16 Javascript
有关jquery与DOM节点操作方法和属性记录
2016/04/15 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
Vue.js第一天学习笔记(数据的双向绑定、常用指令)
2016/12/01 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
js实现3D图片环展示效果
2017/03/09 Javascript
利用jQuery实现一个简单的表格上下翻页效果
2017/03/14 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
原生JS+Canvas实现五子棋游戏实例
2017/06/19 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
快速搭建React的环境步骤详解
2017/11/06 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
javascript实现评分功能
2020/06/24 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
python实时监控cpu小工具
2018/06/21 Python
神经网络相关之基础概念的讲解
2018/12/29 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
HTML5 3D旋转相册的实现示例
2019/12/03 HTML / CSS
美国护肤咨询及美容产品电商:Askderm
2017/02/24 全球购物
自动化系在校本科生求职信
2013/10/23 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
应届毕业生求职信
2014/05/26 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
个人作风建设自查报告
2014/10/22 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
python字典进行运算原理及实例分享
2021/08/02 Python
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电