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如何构建数据表索引
May 13 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
MySQL中utf8mb4排序规则示例
Aug 02 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
SQL优化老出错,那是你没弄明白MySQL解释计划用法
Nov 27 MySQL
Mysql 如何合理地统计一个数据库里的所有表的数据量
Apr 18 MySQL
MySql中的json_extract函数处理json字段详情
Jun 05 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 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
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
PHP XML备份Mysql数据库
2009/05/27 PHP
php邮件发送,php发送邮件的类
2011/03/24 PHP
解析php中反射的应用
2013/06/18 PHP
php中数字0和空值的区别分析
2014/06/05 PHP
WebQQ最新登陆协议的用法
2014/12/22 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
PHP使用Redis实现Session共享的实现示例
2019/05/12 PHP
jQuery参数列表集合
2011/04/06 Javascript
jQuery给元素添加样式的方法详解
2015/12/30 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
jQuery基于ajax操作json数据简单示例
2017/01/05 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
从零开始封装自己的自定义Vue组件
2018/10/09 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
Python 关于反射和类的特殊成员方法
2017/09/14 Python
itchat接口使用示例
2017/10/23 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
python range实例用法分享
2020/02/06 Python
Python读取表格类型文件代码实例
2020/02/17 Python
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
史上最全面的Java面试题汇总!
2015/02/03 面试题
商场拾金不昧表扬信
2014/01/13 职场文书
超市仓管员岗位职责
2014/04/07 职场文书
2015年会计工作总结范文
2015/05/26 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
Mysql排序的特性详情
2021/11/01 MySQL