mysql 關於批量新增 修改的sql寫法

2021-10-09 09:52:28 字數 3899 閱讀 1459

對於程式設計師來說,在開發的過程中,資料庫操作是必不可少的,尤其是在一次性新增大量資料,或者更新大量資料,好的sql語句執行起來可以節約資料庫的壓力。

批量新增

integer insertuserlist

@param

(value =

"list"

) list

userinfolist)

;

xml層

"insertuserlist"

>

insert into user_info

( user_name,address,age

)values

"list" item=

"item" separator=

",">

(#,#,#)

<

/foreach>

<

/insert>

執行的sql

insert into user_info ( user_name, adress, age)

values

("張三"

,"浙江杭州",18

),("李四"

,"浙江廣州",25

)

批量修改

第一種寫法方式:一條update

這種寫法只能針對於要修改的字段都是相同的值。

integer updateuserlist

@param

(value =

"list"

) list

useridlist)

;

xml層

"updateuserlist"

>

update user_info set age =

18,address =

'浙江省杭州市'

where user_id in (

"list" item=

"item" index=

"index" open=

"" close=

"" separator=

",">

#<

/foreach>

)<

/update >

執行的sql

update user_info 

set age =18,

address =

'浙江省杭州市'

where

user_id in (

30069

,30068

)

第二種方式:多條update

這種寫法是可以達到修改每條記錄裡不同欄位的值,但是比較耗費效能,增加了資料庫的壓力,本質上來說,就是把在業務層的for迴圈放到了sql裡去執行,實際上還是多條sql語句。

資料庫鏈結還需要加上:&allowmultiqueries=true

jdbc:mysql:

integer updateuserlist

@param

(value =

"list"

) list

userinfolist)

;

xml層

"updateuserlist"

>

update user_info

"set" suffixoverrides=

",">

"age=case" suffix=

"end,"

>

"list" item=

"cus"

>

when user_id =# then #

<

/foreach>

<

/trim>

"address=case" suffix=

"end,"

>

"list" item=

"cus"

>

when user_id =# then #

<

/foreach>

<

/trim>

<

/trim>

"list" separator=

"or" item=

"cus"

>

user_id =#

<

/foreach>

<

/where>

<

/update>

執行的sql

update user_info set age =

18, address =

'浙江省杭州市'

where user_id =

30069

;update user_info set age =

25, address =

'浙江省雲南市'

where user_id =

30068

;

第三種方式:一條update

可以滿足多條記錄同時修改,且每條記錄字段不同的值

integer updateuserlist

@param

(value =

"list"

) list

useridlist)

;

xml層

"updateuserlist"

>

update user_info

"set" suffixoverrides=

",">

"age=case" suffix=

"end,"

>

"list" item=

"cus"

>

when user_id =# then #

<

/foreach>

<

/trim>

"address=case" suffix=

"end,"

>

"list" item=

"cus"

>

when user_id =# then #

<

/foreach>

<

/trim>

<

/trim>

"list" separator=

"or" item=

"cus"

>

user_id =#

<

/foreach>

<

/where>

<

/update>

執行的sql

update user_info 

set age =

case

when user_id =

30069 then 18

when user_id =

30068 then 20

end,

address =

case

when user_id =

30069 then '浙江杭州'

when user_id =

30068 then '四川成都'

end where user_id =

30069 or user_id =

30068

總結一下,如果每條記錄修改的字段值不同,最好用第三種方式去寫sql語句,簡單的話用第一種方式,不推薦用第二種方式去迴圈寫多條sql語句去執行。

mybatis批量修改,批量新增

mybatis批量修改 批量新增sql語句 1 單個新增 insert into t user user name,mobile values 2 新增並返回主鍵 keyproperty的屬性是要返回的主鍵欄位的名稱 insert into t user user name,mobile value...

mybaits批量新增修改

開發中,批量修改資料應該是很常見的功能需求。今晚開發時配置批量修改功能遇到很多坑,浪費了很多時間,特此記錄下來,跟大家分享,今天你看到的坑我都為您鋪平了。批量執行sql語句,無非就是批量修改和批量新增。我用現在使用量最多的框架mybatis寫乙個修改功能給大家做個demo看。其他的自己舉一反三,我不...

mybatis 批量新增修改

1 dao層 int addstoragebatch liststoragelist int updatestoragebatch param storagelist liststoragelist 2 xml檔案 usegeneratedkeys true keyproperty id inser...