MySQL和Oracle批量插入SQL的通用寫(xiě)法示例
舉個(gè)例子:
現(xiàn)在要批量新增User對(duì)象到數(shù)據(jù)庫(kù)USER表中
public class User{ //姓名 private String name; //年齡 private Integer age; //性別 private Integer sex }
大部分人對(duì)MySQL比較熟悉,可能覺(jué)得批量新增的SQL都是這樣寫(xiě),其實(shí)并不然。該寫(xiě)法在MySQL中沒(méi)問(wèn)題,而在Oracle中,這樣寫(xiě)就會(huì)報(bào)錯(cuò)。
MySQL寫(xiě)法:
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寫(xiě)法:
//多次單條插入 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的兩種寫(xiě)法都比較的麻煩,批量插入也壓根沒(méi)有減少插入的列名。除此之外,另一個(gè)麻煩的事情就是,在企業(yè)開(kāi)發(fā)中,一套軟件系統(tǒng)可能需要支持多套數(shù)據(jù)庫(kù)的,因此這條新增的操作,就得適配兩套數(shù)據(jù)庫(kù),維護(hù)兩套SQL,大大地增加了開(kāi)發(fā)成本。
那么有沒(méi)有一種通用的寫(xiě)法呢?答案是有的。
通用寫(xiě)法:
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文件里各種寫(xiě)法的代碼。
<!--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的寫(xiě)法,因?yàn)镸ySQL支持上述在VALUES后面直接插入多條數(shù)據(jù),因此。foreach標(biāo)簽只需要循環(huán)遍歷出VALUES后面()里的內(nèi)容即可;而Oracle因?yàn)椴恢С诌@種寫(xiě)法因此需要循環(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的通用寫(xiě)法的文章就介紹到這了,更多相關(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)文章
mysql多行子查詢(xún)實(shí)戰(zhàn)案例(只包含不相關(guān)子查詢(xún))
在MySQL中多行子查詢(xún)(也稱(chēng)為 IN 子查詢(xún))是指子查詢(xún)返回多行數(shù)據(jù),并且這些數(shù)據(jù)用于主查詢(xún)中的某個(gè)條件判斷,這篇文章主要介紹了mysql多行子查詢(xún)(只包含不相關(guān)子查詢(xún))的相關(guān)資料,需要的朋友可以參考下2024-10-10Mysql GROUP BY查詢(xún)每組某值最大的一條數(shù)據(jù)
這篇文章主要介紹了Mysql GROUP BY查詢(xún)每組某值最大的一條數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08淺談Mysql、SqlServer、Oracle三大數(shù)據(jù)庫(kù)的區(qū)別
這篇文章主要介紹了Mysql、SqlServer、Oracle三大數(shù)據(jù)庫(kù)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04MySQL臨時(shí)表滿(mǎn)了/臨時(shí)表空間耗盡的解決方法
當(dāng)你收到“臨時(shí)表滿(mǎn)了”的警報(bào)時(shí),通常意味著 MySQL 在處理查詢(xún)時(shí)創(chuàng)建的臨時(shí)表空間已經(jīng)耗盡,本文主要介紹了MySQL臨時(shí)表滿(mǎn)了/臨時(shí)表空間耗盡的解決方法,感興趣的可以了解一下2024-08-08MySQL?8.0新特性之集合操作符INTERSECT和EXCEPT
MySQL8.0.31版本開(kāi)始支持了INTERSECT(交集)和EXCEPT(差集)運(yùn)算,INTERSECT返回兩個(gè)結(jié)果集中都包含的行,EXCEPT返回左側(cè)結(jié)果集存在,右側(cè)不存在的行,這篇文章主要給大家介紹了關(guān)于MySQL?8.0新特性之集合操作符INTERSECT和EXCEPT的相關(guān)資料,需要的朋友可以參考下2022-10-10MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決
這篇文章主要為大家介紹了MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10