MySQL和Oracle批量插入SQL的通用寫法示例
舉個(gè)例子:
現(xiàn)在要批量新增User對(duì)象到數(shù)據(jù)庫(kù)USER表中
public class User{
//姓名
private String name;
//年齡
private Integer age;
//性別
private Integer sex
}
大部分人對(duì)MySQL比較熟悉,可能覺得批量新增的SQL都是這樣寫,其實(shí)并不然。該寫法在MySQL中沒(méi)問(wèn)題,而在Oracle中,這樣寫就會(huì)報(bào)錯(cuò)。
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;
可以發(fā)現(xiàn)Oracle的兩種寫法都比較的麻煩,批量插入也壓根沒(méi)有減少插入的列名。除此之外,另一個(gè)麻煩的事情就是,在企業(yè)開發(fā)中,一套軟件系統(tǒng)可能需要支持多套數(shù)據(jù)庫(kù)的,因此這條新增的操作,就得適配兩套數(shù)據(jù)庫(kù),維護(hù)兩套SQL,大大地增加了開發(fā)成本。
那么有沒(méi)有一種通用的寫法呢?答案是有的。
通用寫法:
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
這樣一來(lái),既簡(jiǎn)單又能少維護(hù)一套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>
仔細(xì)觀察MySQL和Oracle的寫法,因?yàn)镸ySQL支持上述在VALUES后面直接插入多條數(shù)據(jù),因此。foreach標(biāo)簽只需要循環(huán)遍歷出VALUES后面()里的內(nèi)容即可;而Oracle因?yàn)椴恢С诌@種寫法因此需要循環(huán)遍歷整個(gè)INSERT語(yǔ)句。
<!--通用的批量插入-->
<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>
總結(jié)
到此這篇關(guān)于MySQL和Oracle批量插入SQL的通用寫法的文章就介紹到這了,更多相關(guān)MySQL和Oracle批量插入SQL內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL通過(guò)函數(shù)存儲(chǔ)過(guò)程批量插入數(shù)據(jù)
- Mysql批量插入數(shù)據(jù)時(shí)該如何解決重復(fù)問(wèn)題詳解
- MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式總結(jié)
- MySQL之批量插入的4種方案總結(jié)
- MyBatis實(shí)現(xiàn)MySQL批量插入的示例代碼
- mysql大批量插入數(shù)據(jù)的正確解決方法
- python批量插入數(shù)據(jù)到mysql的3種方法
- 你一定用的上的MySQL批量插入技巧分享
- mysql數(shù)據(jù)庫(kù)數(shù)據(jù)批量插入的實(shí)現(xiàn)
相關(guān)文章
在 Windows 10 上安裝 解壓縮版 MySql(推薦)
這篇文章主要介紹了在 Windows 10 上安裝 解壓縮版 MySql(推薦)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12
MySQL借助DB實(shí)現(xiàn)分布式鎖思路詳解
這篇文章主要給大家介紹了關(guān)于MySQL借助DB實(shí)現(xiàn)分布式鎖思路的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
MySql通過(guò)ip地址進(jìn)行訪問(wèn)的方法
這篇文章主要介紹了MySql通過(guò)ip地址進(jìn)行訪問(wèn)的方法,首先要登錄mysql,切換數(shù)據(jù)庫(kù)然后授權(quán),具體代碼詳情大家參考下本文2018-06-06
Linux CentOS MySQL數(shù)據(jù)庫(kù)安裝配置教程
這篇文章主要為大家詳細(xì)介紹了Linux CentOS MySQL數(shù)據(jù)庫(kù)的安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
專業(yè)級(jí)的MySQL開發(fā)設(shè)計(jì)規(guī)范及SQL編寫規(guī)范
這篇文章主要介紹了專業(yè)級(jí)的MySQL開發(fā)設(shè)計(jì)規(guī)范及SQL編寫規(guī)范,需要的朋友可以參考下2020-11-11
MySQL中的布爾值,怎么存儲(chǔ)false或true
這篇文章主要介紹了MySQL中的布爾值,怎么存儲(chǔ)false或true的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

