激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

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

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

2021-12-05 22:33GreatHair Mysql

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

舉個例子:

現在要批量新增User對象到數據庫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;

可以發現Oracle的兩種寫法都比較的麻煩,批量插入也壓根沒有減少插入的列名。除此之外,另一個麻煩的事情就是,在企業開發中,一套軟件系統可能需要支持多套數據庫的,因此這條新增的操作,就得適配兩套數據庫,維護兩套SQL,大大地增加了開發成本。

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

通用寫法:

?
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后面直接插入多條數據,因此。foreach標簽只需要循環遍歷出VALUES后面()里的內容即可;而Oracle因為不支持這種寫法因此需要循環遍歷整個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>

總結

到此這篇關于MySQL和Oracle批量插入SQL的通用寫法的文章就介紹到這了,更多相關MySQL和Oracle批量插入SQL內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 自拍偷拍亚洲图片 | 精品国产一区二区三区四区在线 | 在线成人影视 | 人人玩人人爽 | 精品中文字幕在线观看 | 日日噜噜噜噜久久久精品毛片 | 精品国产成人 | 乱淫67194| 亚洲乱操 | 国产精品九九久久一区hh | 欧美日韩国产成人在线 | 精品国产一区二区三区四 | 99久久久精品| 三级xxxx| 国产一级午夜 | 一级一片免费看 | 91成人一区| 永久免费不卡在线观看黄网站 | 久久新地址 | 亚洲99 | va视频| 毛片视频网站 | 久久欧美亚洲另类专区91大神 | 性欧美性欧美 | 成人福利视频在线观看 | 亚洲婷婷日日综合婷婷噜噜噜 | 精品亚洲一区二区三区 | 精品国产96亚洲一区二区三区 | 国产精品久久国产精麻豆96堂 | 成人精品久久久 | 福利在线影院 | 海角在线观看91一区二区 | 宅男视频在线观看免费 | av影院在线播放 | 99成人在线 | 国产亚洲自拍一区 | 哪里可以看免费的av | 精品国产一区二区三区四区阿崩 | 免费永久在线观看黄网 | 欧美性受xxxxxx黑人xyx性爽 | 日本一区二区在线 |