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 05 MySQL
MySQL的join buffer原理
Apr 29 MySQL
MySQL 表空间碎片的概念及相关问题解决
May 07 MySQL
MySQL 重命名表的操作方法及注意事项
May 21 MySQL
MYSQL(电话号码,身份证)数据脱敏的实现
May 28 MySQL
MySQL连接查询你真的学会了吗?
Jun 02 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
MySQL系列之二 多实例配置
Jul 02 MySQL
SQL之各种join小结详细讲解
Aug 04 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
MySQL中几种插入和批量语句实例详解
Sep 14 MySQL
MySQL七大JOIN的具体使用
Feb 28 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
discuz Passport 通行证 整合笔记
2008/06/30 PHP
php对gzip文件或者字符串解压实例参考
2008/07/25 PHP
php下尝试使用GraphicsMagick的缩略图功能
2011/01/01 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
禁止直接访问php文件代码分享
2020/05/05 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
计算世界完全对称日的js代码,粗糙版
2011/11/04 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
javascript模拟实现C# String.format函数功能代码
2013/11/25 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
vue使用rem实现 移动端屏幕适配
2018/09/26 Javascript
JavaScript JMap类定义与使用方法示例
2019/01/22 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
2020/04/16 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
详解Typescript 内置的模块导入兼容方式
2020/05/31 Javascript
Python json模块dumps、loads操作示例
2018/09/06 Python
Django 外键的使用方法详解
2019/07/19 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
Django视图、传参和forms验证操作
2020/07/15 Python
CSS3 please 跨浏览器的CSS3产生器
2010/03/14 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
毕业生物理教师求职信
2013/10/17 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
动漫设计与制作专业推荐信
2014/07/07 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
单位租房协议书范本
2014/12/04 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript