MySQL和Oracle批量插入SQL的通用写法示例
程序员文章站
2022-06-24 23:42:51
目录举个例子:通用写法:总结举个例子:现在要批量新增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内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
推荐阅读
-
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
-
清晰讲解SQL语句中的外连接,通用于Mysql和Oracle,全是干货哦
-
清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦
-
mybatis针对oracle和mysql高效率批量插入的解决方案 - mybatis经典案例(无敌篇)
-
MySQL和Oracle批量插入SQL的通用写法示例
-
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
-
清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦
-
高级oracle和mysql高低效率批量插入的区别 - 数据库经典案例(中级篇)
-
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
-
c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)