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 08 MySQL
解析MySQL binlog
Jun 11 MySQL
Unity连接MySQL并读取表格数据的实现代码
Jun 20 MySQL
MySQL开启事务的方式
Jun 26 MySQL
mysql 数据插入优化方法之concurrent_insert
Jul 01 MySQL
MySQL 开窗函数
Feb 15 MySQL
解决MySQL添加新用户-ERROR 1045 (28000)的问题
Mar 03 MySQL
关于k8s环境部署mysql主从的问题
Mar 13 MySQL
浅谈MySQL中的六种日志
Mar 23 MySQL
提高系统的吞吐量解决数据库重复写入问题
Apr 23 MySQL
MySQL控制流函数(-if ,elseif,else,case...when)
Jul 07 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 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+croppic.js实现剪切上传图片功能
2018/08/14 PHP
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
Jquery cookie操作代码
2010/03/14 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
JS中完美兼容各大浏览器的scrolltop方法
2015/04/17 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
nodejs 中模拟实现 emmiter 自定义事件
2016/02/22 NodeJs
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
JavaScript数据结构之广义表的定义与表示方法详解
2017/04/12 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
详细分析jsonp的原理和实现方式
2017/11/20 Javascript
vue 项目打包通过命令修改 vue-router 模式 修改 API 接口前缀
2018/06/13 Javascript
vue.js多页面开发环境搭建过程
2019/04/24 Javascript
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
解决Keras中CNN输入维度报错问题
2020/06/29 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
产品工艺师的岗位职责
2013/11/15 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
2014保险公司内勤工作总结
2014/12/16 职场文书
大雁塔导游词
2015/02/04 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书
四年级作文之植物
2019/09/20 职场文书
Vue3如何理解ref toRef和toRefs的区别
2022/02/18 Vue.js
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python