欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL和Oracle批量插入SQL的通用寫(xiě)法示例

 更新時(shí)間:2021年11月12日 14:27:02   作者:GreatHair  
當(dāng)我們要往數(shù)據(jù)庫(kù)中批量保存多條數(shù)據(jù)得時(shí)候,分不同數(shù)據(jù)庫(kù),有不同得插入方式,這篇文章主要給大家介紹了關(guān)于MySQL和Oracle批量插入SQL的通用寫(xiě)法的相關(guān)資料,需要的朋友可以參考下

舉個(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 超詳細(xì)MySQL8.0.22安裝及配置教程

    超詳細(xì)MySQL8.0.22安裝及配置教程

    這篇文章主要介紹了超詳細(xì)MySQL8.0.22安裝及配置教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL簡(jiǎn)化輸入小技巧

    MySQL簡(jiǎn)化輸入小技巧

    在這里我將介紹兩個(gè)使用MySQL數(shù)據(jù)庫(kù)時(shí)候簡(jiǎn)化輸入的小技巧。
    2011-09-09
  • CentOS mysql安裝系統(tǒng)方法

    CentOS mysql安裝系統(tǒng)方法

    CentOS mysql安裝還是很常用的軟件,我就學(xué)習(xí)如何CentOS mysql安裝,在這里拿出來(lái)和大家分享一下,希望對(duì)大家有用。
    2010-11-11
  • mysql多行子查詢(xún)實(shí)戰(zhàn)案例(只包含不相關(guān)子查詢(xú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-10
  • Mysql GROUP BY查詢(xún)每組某值最大的一條數(shù)據(jù)

    Mysql 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ū)別

    這篇文章主要介紹了Mysql、SqlServer、Oracle三大數(shù)據(jù)庫(kù)的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL臨時(shí)表滿(mǎn)了/臨時(shí)表空間耗盡的解決方法

    MySQL臨時(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-08
  • MySQL?8.0新特性之集合操作符INTERSECT和EXCEPT

    MySQL?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-10
  • MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決

    MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決

    這篇文章主要為大家介紹了MySQL 遷移后無(wú)法快速導(dǎo)數(shù)據(jù)問(wèn)題解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • Mysql大型SQL文件快速恢復(fù)方案分享

    Mysql大型SQL文件快速恢復(fù)方案分享

    這篇文章主要給大家介紹了關(guān)于Mysql大型SQL文件快速恢復(fù)方案的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09

最新評(píng)論