国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術(shù)|

服務(wù)器之家 - 數(shù)據(jù)庫 - Mysql - MySQL和Oracle批量插入SQL的通用寫法示例

MySQL和Oracle批量插入SQL的通用寫法示例

2021-12-05 22:33GreatHair Mysql

當我們要往數(shù)據(jù)庫中批量保存多條數(shù)據(jù)得時候,分不同數(shù)據(jù)庫,有不同得插入方式,這篇文章主要給大家介紹了關(guān)于MySQL和Oracle批量插入SQL的通用寫法的相關(guān)資料,需要的朋友可以參考下

舉個例子:

現(xiàn)在要批量新增User對象到數(shù)據(jù)庫USER表中

?
1
2
3
4
5
6
7
8
public class User{
    //姓名
    private String name;
    //年齡
    private Integer age;
    //性別
    private Integer sex
}

大部分人對MySQL比較熟悉,可能覺得批量新增的SQL都是這樣寫,其實并不然。該寫法在MySQL中沒問題,而在Oracle中,這樣寫就會報錯。

MySQL寫法:

?
1
2
3
4
5
6
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寫法:

?
1
2
3
4
5
6
7
8
9
10
11
//多次單條插入
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的兩種寫法都比較的麻煩,批量插入也壓根沒有減少插入的列名。除此之外,另一個麻煩的事情就是,在企業(yè)開發(fā)中,一套軟件系統(tǒng)可能需要支持多套數(shù)據(jù)庫的,因此這條新增的操作,就得適配兩套數(shù)據(jù)庫,維護兩套SQL,大大地增加了開發(fā)成本。

那么有沒有一種通用的寫法呢?答案是有的。

通用寫法:

?
1
2
3
4
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文件里各種寫法的代碼。

?
1
2
3
4
5
6
7
8
9
<!--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>
?
1
2
3
4
5
6
7
8
9
10
11
<!--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后面直接插入多條數(shù)據(jù),因此。foreach標簽只需要循環(huán)遍歷出VALUES后面()里的內(nèi)容即可;而Oracle因為不支持這種寫法因此需要循環(huán)遍歷整個INSERT語句。

?
1
2
3
4
5
6
7
8
9
10
<!--通用的批量插入-->
<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)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/whileGreatHair/p/15533379.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内久久| 精品久久国产 | 国产成人精品一区二区三区视频 | 91国自产精品中文字幕亚洲 | 日韩精品视频在线观看一区二区 | 日日久 | 日本一级淫片免费看 | 亚洲成av人影片在线观看 | 国产精品成人在线 | 亚洲精品影院 | 午夜资源 | 国产成年人电影在线观看 | 糈精国产xxxx在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 91免费网| 一区二区免费在线观看 | 狠狠操综合网 | 国产资源在线免费观看 | 免费色视频 | 亚洲成人精品久久久 | 干中文字幕 | 国产精品国产精品国产专区不片 | 久久精品国产99国产精品 | 久久午夜视频 | 成人精品视频免费 | 国产精品久久久久久久午夜片 | 日韩在线视频中文字幕 | 黄色网毛片 | 一级欧美 | 精品久久久久久国产 | 狠狠躁夜夜躁人人爽天天高潮 | 欧美在线播放一区 | 成人免费国产 | 动漫羞免费网站中文字幕 | 国产久 | 亚洲成av人片在线观看 | 精品第一页 | 粉嫩欧美一区二区三区高清影视 | av不卡在线播放 | 国产一区二区精品久久 | 久久精品a一级国产免视看成人 |