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学习笔记之事务隔离级别详解
May 12 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
MySQL 全文检索的使用示例
Jun 07 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
MySQL中的隐藏列的具体查看
Sep 04 MySQL
MySQL修炼之联结与集合浅析
Oct 05 MySQL
mysql中int(3)和int(10)的数值范围是否相同
Oct 16 MySQL
MySQL悲观锁与乐观锁的实现方案
Nov 02 MySQL
简单聊一聊SQL注入及防止SQL注入
Mar 23 MySQL
分析MySQL优化 index merge 后引起的死锁
Apr 19 MySQL
MySQL的意向共享锁、意向排它锁和死锁
Jul 15 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 self,$this,const,static,-&amp;gt;的使用
2009/10/22 PHP
PHP生成随机用户名和密码的实现代码
2013/02/27 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
2018/10/17 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
Javascript aop(面向切面编程)之around(环绕)分析
2015/05/01 Javascript
基于jQuery实现Div窗口震动特效代码-代码简单
2015/08/28 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
js+css绘制颜色动态变化的圈中圈效果
2016/01/27 Javascript
js去字符串前后空格的实现方法
2016/02/26 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
微信小程序 实现动态显示和隐藏某个控件
2017/04/27 Javascript
JavaScript数组去重的几种方法
2019/04/07 Javascript
关于layui 弹出层一闪而过就消失的解决方法
2019/09/09 Javascript
进一步探究Python中的正则表达式
2015/04/28 Python
python实现查找excel里某一列重复数据并且剔除后打印的方法
2015/05/26 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
2016/03/02 Python
Python 中的 else详解
2016/04/23 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
Python中标准模块importlib详解
2017/04/16 Python
python3实现TCP协议的简单服务器和客户端案例(分享)
2017/06/14 Python
python移位运算的实现
2019/07/15 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
python中数据库like模糊查询方式
2020/03/02 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
如何反序的迭代一个序列?how do I iterate over a sequence in reverse order
2012/02/04 面试题
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
工作作风整顿个人剖析材料
2014/10/11 职场文书
防汛工作情况汇报
2014/10/28 职场文书
公司的力量观后感
2015/06/05 职场文书
教你如何使用Python Tkinter库制作记事本
2021/06/10 Python
详解ZABBIX监控ESXI主机的问题
2022/06/21 Servers