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 8.0 之不可见列的基本操作
May 20 MySQL
MySQL高速缓存启动方法及参数详解(query_cache_size)
Jul 01 MySQL
MySQL 四种连接和多表查询详解
Jul 16 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
MySQL命令无法输入中文问题的解决方式
Aug 30 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
SQL 聚合、分组和排序
Nov 11 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
pt-archiver 主键自增
Apr 26 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 file_exists 检查文件或目录是否存在的函数
2010/05/10 PHP
php指定函数参数默认值示例代码
2013/12/04 PHP
PHP比你想象的好得多
2014/11/27 PHP
php实现图片转换成ASCII码的方法
2015/04/03 PHP
PHP+AJAX实现投票功能的方法
2015/09/28 PHP
javascript 函数式编程
2007/08/16 Javascript
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
php 中序列化和json使用介绍
2013/07/08 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
AngularJS中的Directive自定义一个表格
2016/01/25 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
jQuery实现优雅的弹窗效果(6)
2017/02/08 Javascript
使用vue-cli4.0快速搭建一个项目的方法步骤
2019/12/04 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
夯基础之手撕javascript继承详解
2020/11/09 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python对url格式解析的方法
2015/05/13 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python实现MySQL操作的方法小结【安装,连接,增删改查等】
2017/07/12 Python
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python实现图片拼接的代码
2018/07/02 Python
python计算两个矩形框重合百分比的实例
2018/11/07 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
Django中的静态文件管理过程解析
2019/08/01 Python
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
英语师范专业毕业生自荐信
2013/09/21 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书