数据库教程:MySQL和Oracle批量插入SQL的通用写法示例

目录举个例子:通用写法:总结举个例子:现在要批量新增user对象到数据库user表中public class user{ //姓名 private string name; //年龄

目录
  • 举个例子:
  • 通用写法:
  • 总结

举个例子:

现在要批量新增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内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

需要了解更多数据库技术:MySQL和Oracle批量插入SQL的通用写法示例,都可以关注数据库技术分享栏目—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/941856.html

(0)
上一篇 2021年11月15日
下一篇 2021年11月15日

精彩推荐