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 如何批量插入数据
Apr 06 MySQL
MySQL COUNT函数的使用与优化
May 10 MySQL
MySQL中你可能忽略的COLLATION实例详解
May 12 MySQL
MySQL主从搭建(多主一从)的实现思路与步骤
May 13 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL去除重叠时间求时间差和的实现
Aug 23 MySQL
解析MySQL索引的作用
Mar 03 MySQL
mysql 生成连续日期及变量赋值
Mar 20 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
mysql sql常用语句大全
Jun 21 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
php 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
Codeigniter实现智能裁剪图片的方法
2014/06/12 PHP
PHP简单实现断点续传下载的方法
2015/09/25 PHP
jQuery 操作XML入门
2008/12/25 Javascript
面向对象的javascript(笔记)
2009/10/06 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
jquery判断密码强度的验证代码
2020/04/22 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
JavaScript反射与依赖注入实例详解
2018/05/29 Javascript
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
微信小程序实现点击图片旋转180度并且弹出下拉列表
2018/11/27 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
Python字符串处理之count()方法的使用
2015/05/18 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
Python实现端口检测的方法
2018/07/24 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python 字典访问的三种方法小结
2019/12/05 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
PHP基于phpqrcode类库生成二维码过程解析
2020/05/28 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
用python 绘制茎叶图和复合饼图
2021/02/26 Python
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
总经理助理工作职责
2014/02/06 职场文书
劲霸男装广告词
2014/03/21 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
保护地球的标语
2014/06/17 职场文书
医德医风自我评价
2014/09/19 职场文书
高三英语复习计划
2015/01/19 职场文书
观后感的写法
2015/06/19 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
Java面试题冲刺第十八天--Spring框架3
2021/08/07 面试题
python APScheduler执行定时任务介绍
2022/04/19 Python
win10系统计算机图标怎么调出来?win10调出计算机图标的方法
2022/08/14 数码科技