mysql中update按照多重條件進行更新處理的方案
1.場景問題說明
mysql中一般的update寫法支持的方式是,update 表 set 字段名=修改后的字段值 where 條件1 and 條件2 and 其他條件;如果現(xiàn)在需求是對滿足where后面的條件基礎之上需對滿足指定的條件數(shù)據(jù)再進行不同更新處理,那應該如何處理?如果有這樣的疑問或是遇到此類場景請繼續(xù)往下看.
還原一下我遇到的業(yè)務場景:現(xiàn)有一批會員卡,會員卡類型有次數(shù)卡和期限卡之分,期限卡余額為每天扣除一天,次數(shù)卡余額不隨時間進行變化,只有使用之后才會扣除?,F(xiàn)需要對會員卡進行更新截止時間的操作,其中只需要對期限卡更新余額操作。主要問題的難點在于會員卡類型為期限卡的會員卡,不僅需要更新有效截止時間,還需要更新會員卡的余額。為方便說明問題,簡化業(yè)務如下:將會員卡id為1、2、3的截止日期更新為2022-05-01 22:50:59,其中期限卡余額更新為11.次數(shù)卡余額不做處理(會員卡id為1和2為期限卡,3為次數(shù)卡)。
會員卡表信息:

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)
配置文件寫法:
<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>
注意寫法:只對于期限卡才更新余額,次數(shù)卡余額不更新,也就是次數(shù)卡的余額rest_count字段不進行更新,直接寫ELSE rest_count,如果次數(shù)卡余額更新為其他金額,則ELSE 后面寫具體的余額值.
2.2 使用if標簽
組裝會員卡列表信息,將每個會員卡的卡類型進行設置
ArrayList<CardInfo> cardList= new ArrayList<>();
CardInfo cardInfo = new CardInfo();
// 設置會員卡id
cardInfo.setId(1);
// 設置會員卡類型: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 {
// 更新會員卡信息
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é)
到此這篇關于mysql中update按照多重條件進行更新處理的文章就介紹到這了,更多相關mysql update按多重條件更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql xtrabackup 備份恢復實現(xiàn)分享
Xtrabackup是由percona提供的mysql數(shù)據(jù)庫備份工具,據(jù)官方介紹,這也是世界上惟一一款開源的能夠?qū)nnodb和xtradb數(shù)據(jù)庫進行熱備的工具2012-11-11
mysql數(shù)據(jù)庫開發(fā)規(guī)范【推薦】
這篇文章主要介紹了mysql數(shù)據(jù)庫開發(fā)規(guī)范的相關內(nèi)容,還是十分不錯的,這里給大家分享下,需要的朋友可以參考。2017-10-10
windows server2014 安裝 Mysql Applying Security出錯的完美解決方法
這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯的完美解決方法,造成這種問題的主要原因是因為安裝一遍之后沒有卸載干凈,要解決這個問題需要注意以下幾點,具體解決方法,大家參考下本文2017-07-07
MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例代碼
在 MySQL 中,要獲取數(shù)據(jù)庫內(nèi)所有表格的數(shù)據(jù)總數(shù),可以編寫一個查詢腳本來遍歷每個表并計算其行數(shù),所以本文給大家介紹了MySQL獲取數(shù)據(jù)庫內(nèi)所有表格數(shù)據(jù)總數(shù)的示例,需要的朋友可以參考下2024-11-11
mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導入備份
今天小編就為大家分享一篇關于mysql數(shù)據(jù)庫和oracle數(shù)據(jù)庫之間互相導入備份,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04
mysql使用自定義序列實現(xiàn)row_number功能(步驟詳解)
這篇文章主要介紹了mysql使用自定義序列實現(xiàn)row_number功能,本文分步驟通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-12-12

