MySQL和Oracle批量插入SQL的通用寫法示例
舉個例子:
現(xiàn)在要批量新增User對象到數(shù)據(jù)庫USER表中
public class User{
//姓名
private String name;
//年齡
private Integer age;
//性別
private Integer sex
}
大部分人對MySQL比較熟悉,可能覺得批量新增的SQL都是這樣寫,其實并不然。該寫法在MySQL中沒問題,而在Oracle中,這樣寫就會報錯。
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的兩種寫法都比較的麻煩,批量插入也壓根沒有減少插入的列名。除此之外,另一個麻煩的事情就是,在企業(yè)開發(fā)中,一套軟件系統(tǒng)可能需要支持多套數(shù)據(jù)庫的,因此這條新增的操作,就得適配兩套數(shù)據(jù)庫,維護兩套SQL,大大地增加了開發(fā)成本。
那么有沒有一種通用的寫法呢?答案是有的。
通用寫法:
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文件里各種寫法的代碼。
<!--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>
仔細觀察MySQL和Oracle的寫法,因為MySQL支持上述在VALUES后面直接插入多條數(shù)據(jù),因此。foreach標(biāo)簽只需要循環(huán)遍歷出VALUES后面()里的內(nèi)容即可;而Oracle因為不支持這種寫法因此需要循環(huán)遍歷整個INSERT語句。
<!--通用的批量插入-->
<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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在 Windows 10 上安裝 解壓縮版 MySql(推薦)
這篇文章主要介紹了在 Windows 10 上安裝 解壓縮版 MySql(推薦)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12
Linux CentOS MySQL數(shù)據(jù)庫安裝配置教程
這篇文章主要為大家詳細介紹了Linux CentOS MySQL數(shù)據(jù)庫的安裝配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
專業(yè)級的MySQL開發(fā)設(shè)計規(guī)范及SQL編寫規(guī)范
這篇文章主要介紹了專業(yè)級的MySQL開發(fā)設(shè)計規(guī)范及SQL編寫規(guī)范,需要的朋友可以參考下2020-11-11

