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
left join、inner join、right join的区别
Apr 05 MySQL
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
MySQL into_Mysql中replace与replace into用法案例详解
Sep 14 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
浅谈MySQL中的六种日志
Mar 23 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
MySQL约束(创建表时的各种条件说明)
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 xml文件操作代码(一)
2009/03/20 PHP
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
2011/10/29 PHP
PHP面向对象法则
2012/02/23 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
利用Javascript判断操作系统的类型实现不同操作系统下的兼容性
2013/01/29 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
微信小程序加载更多 点击查看更多
2016/11/29 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
Cropper.js 实现裁剪图片并上传(PC端)
2017/08/20 Javascript
js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)
2017/09/19 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
javascript使用Blob对象实现的下载文件操作示例
2020/04/18 Javascript
python中私有函数调用方法解密
2016/04/29 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
python实现邮件循环自动发件功能
2020/09/11 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
廉洁自律承诺书
2014/03/27 职场文书
党的生日演讲稿
2014/09/10 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
与美同行演讲稿
2014/09/13 职场文书
2015年机械设备管理工作总结
2015/05/04 职场文书
计划生育责任书
2015/05/09 职场文书
一百条裙子读书笔记
2015/07/01 职场文书
python微信智能AI机器人实现多种支付方式
2022/04/12 Python