mysql中update按照多重條件進(jìn)行更新處理的方案
1.場(chǎng)景問(wèn)題說(shuō)明
mysql中一般的update寫(xiě)法支持的方式是,update 表 set 字段名=修改后的字段值 where 條件1 and 條件2 and 其他條件;如果現(xiàn)在需求是對(duì)滿足where后面的條件基礎(chǔ)之上需對(duì)滿足指定的條件數(shù)據(jù)再進(jìn)行不同更新處理,那應(yīng)該如何處理?如果有這樣的疑問(wèn)或是遇到此類場(chǎng)景請(qǐng)繼續(xù)往下看.
還原一下我遇到的業(yè)務(wù)場(chǎng)景:現(xiàn)有一批會(huì)員卡,會(huì)員卡類型有次數(shù)卡和期限卡之分,期限卡余額為每天扣除一天,次數(shù)卡余額不隨時(shí)間進(jìn)行變化,只有使用之后才會(huì)扣除?,F(xiàn)需要對(duì)會(huì)員卡進(jìn)行更新截止時(shí)間的操作,其中只需要對(duì)期限卡更新余額操作。主要問(wèn)題的難點(diǎn)在于會(huì)員卡類型為期限卡的會(huì)員卡,不僅需要更新有效截止時(shí)間,還需要更新會(huì)員卡的余額。為方便說(shuō)明問(wèn)題,簡(jiǎn)化業(yè)務(wù)如下:將會(huì)員卡id為1、2、3的截止日期更新為2022-05-01 22:50:59,其中期限卡余額更新為11.次數(shù)卡余額不做處理(會(huì)員卡id為1和2為期限卡,3為次數(shù)卡)。
會(huì)員卡表信息:
2.處理方案
2.1 使用update case when
sql如下:
UPDATE staff_card SET end_time="2022-05-01 22:50:59",update_time=NOW(), rest_count=(CASE WHEN card_type=1 THEN 11 ELSE rest_count END) WHERE id IN (1,2,3)
配置文件寫(xiě)法:
<update id="updateRestCount" > UPDATE staff_card <set> end_time="2022-05-01 22:50:59",update_time=NOW(), rest_count=(CASE WHEN card_type=1 THEN 11 ELSE rest_count END) </set> WHERE id IN ( <foreach collection="cardIds" item="cardId"> #{cardId} </foreach> ) </update>
注意寫(xiě)法:只對(duì)于期限卡才更新余額,次數(shù)卡余額不更新,也就是次數(shù)卡的余額rest_count字段不進(jìn)行更新,直接寫(xiě)ELSE rest_count
,如果次數(shù)卡余額更新為其他金額,則ELSE
后面寫(xiě)具體的余額值.
2.2 使用if標(biāo)簽
組裝會(huì)員卡列表信息,將每個(gè)會(huì)員卡的卡類型進(jìn)行設(shè)置
ArrayList<CardInfo> cardList= new ArrayList<>(); CardInfo cardInfo = new CardInfo(); // 設(shè)置會(huì)員卡id cardInfo.setId(1); // 設(shè)置會(huì)員卡類型:1.期限卡;2.次數(shù)卡 cardInfo.setCardType(1); CardInfo cardInfo2 = new CardInfo(); cardInfo2.setId(2); cardInfo2.setCardType(1); CardInfo cardInfo3 = new CardInfo(); cardInfo3.setId(3); cardInfo3.setCardType(2); cardList.add(cardInfo); cardList.add(cardInfo2); cardList.add(cardInfo3);
mapper接口:
public interface CardMapper { // 更新會(huì)員卡信息 void updateRestCount(@Param("cardList") List<CardInfo> cardInfos); }
配置文件:
<update id="updateRestCount" > <foreach collection="cardList" item="card"> UPDATE staff_card <set> end_time="2022-05-01 22:50:59",update_time=NOW(), <if test="card.cardType == 1"> rest_count =11 </if> </set> WHERE id=#{card.id}; </foreach> </update>
總結(jié)
到此這篇關(guān)于mysql中update按照多重條件進(jìn)行更新處理的文章就介紹到這了,更多相關(guān)mysql update按多重條件更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL如何實(shí)現(xiàn)事務(wù)的ACID
這篇文章主要介紹了MySQL如何實(shí)現(xiàn)事務(wù)的四大特性,幫助大家更好的理解和學(xué)習(xí)MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下2020-09-09MySQL之DATE_ADD()和DATE_SUB()函數(shù)的使用方式
這篇文章主要介紹了MySQL之DATE_ADD()和DATE_SUB()函數(shù)的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04簡(jiǎn)單了解標(biāo)準(zhǔn)SQL的update語(yǔ)句三種用法
這篇文章主要介紹了簡(jiǎn)單了解標(biāo)準(zhǔn)SQL的update語(yǔ)句三種用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06MySQL數(shù)據(jù)庫(kù)優(yōu)化的六種方式總結(jié)
關(guān)于數(shù)據(jù)庫(kù)優(yōu)化,網(wǎng)上有不少資料和方法,但是不少質(zhì)量參差不齊,所以下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)優(yōu)化的六種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01CentOS 6.5下yum安裝 MySQL-5.5全過(guò)程圖文教程
在linux安裝mysql是一個(gè)困難的事情,yum安裝一般是安裝的mysql5.1,現(xiàn)在經(jīng)過(guò)自己不懈努力終于能用yum安裝mysql5.5了。下面通過(guò)兩種方法給大家介紹CentOS 6.5下yum安裝 MySQL-5.5全過(guò)程,一起學(xué)習(xí)吧2016-05-05MySQL中關(guān)于null值的一個(gè)小問(wèn)題
這篇文章主要介紹了MySQL中關(guān)于null值的一個(gè)小問(wèn)題,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下2021-03-03