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 InnoDB存储引擎的内存管理
Apr 08 MySQL
MySQL 慢查询日志深入理解
Apr 22 MySQL
mysql 索引合并的使用
Aug 30 MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 MySQL
MySQL之MyISAM存储引擎的非聚簇索引详解
Mar 03 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
Mysql超详细讲解死锁问题的理解
Apr 01 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 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 strtr() 函数使用说明
2008/11/21 PHP
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP通过串口实现发送短信
2015/07/08 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
jQuery创建自己的插件(自定义插件)的方法
2010/06/10 Javascript
jquery中EasyUI实现同步树
2015/03/01 Javascript
浅谈Javascript实现继承的方法
2015/07/06 Javascript
js实现文本框支持加减运算的方法
2015/08/19 Javascript
jQuery实现带有洗牌效果的动画分页实例
2015/08/31 Javascript
javascript显示倒计时控制按钮的简单实现
2016/06/07 Javascript
详解ES6中的let命令
2020/04/05 Javascript
js使用html2canvas实现屏幕截取的示例代码
2017/08/28 Javascript
动态加载权限管理模块中的Vue组件
2018/01/16 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
python对指定目录下文件进行批量重命名的方法
2015/04/18 Python
使用Python求解最大公约数的实现方法
2015/08/20 Python
对python周期性定时器的示例详解
2019/02/19 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
Python使用pdb调试代码的技巧
2020/05/03 Python
Python中zip函数如何使用
2020/06/04 Python
python3代码输出嵌套式对象实例详解
2020/12/03 Python
html5的canvas方法使用指南
2014/12/15 HTML / CSS
英国高档百货连锁店:John Lewis
2017/11/20 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
电子商务专业在校生实习自我鉴定
2013/09/29 职场文书
《诚实与信任》教学反思
2014/04/10 职场文书
销售顾问工作计划书
2014/08/15 职场文书
参加招聘会后的感想
2015/08/10 职场文书
Jupyter Notebook 如何修改字体和大小以及更改字体样式
2021/06/03 Python
一文解答什么是MySQL的回表
2022/08/05 MySQL