mysql中update按照多重条件进行更新处理的方案
目录
- 1.场景问题说明
- 2.处理方案
- 2.1 使用update case when
- 2.2 使用if标签
- 总结
1.场景问题说明 mysql中一般的update写法支持的方式是,update 表 set 字段名=修改后的字段值 where 条件1 and 条件2 and 其他条件; 如果现在需求是对满足where后面的条件基础之上需对满足指定的条件数据再进行不同更新处理,那应该如何处理?如果有这样的疑问或是遇到此类场景请继续往下看.
还原一下我遇到的业务场景:现有一批会员卡,会员卡类型有次数卡和期限卡之分,期限卡余额为每天扣除一天,次数卡余额不随时间进行变化,只有使用之后才会扣除。现需要对会员卡进行更新截止时间的操作,其中只需要对期限卡更新余额操作。主要问题的难点在于会员卡类型为期限卡的会员卡,不仅需要更新有效截止时间,还需要更新会员卡的余额。为方便说明问题,简化业务如下:将会员卡id为1、2、3的截止日期更新为2022-05-01 22:50:59,其中期限卡余额更新为11.次数卡余额不做处理(会员卡id为1和2为期限卡,3为次数卡)。
会员卡表信息:
文章图片
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 staff_cardend_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( #{cardId} )
【mysql中update按照多重条件进行更新处理的方案】注意写法:只对于期限卡才更新余额,次数卡余额不更新,也就是次数卡的余额rest_count字段不进行更新,直接写
ELSE rest_count
,如果次数卡余额更新为其他金额,则ELSE
后面写具体的余额值.2.2 使用if标签
组装会员卡列表信息,将每个会员卡的卡类型进行设置
ArrayListcardList= new ArrayList<>(); CardInfo cardInfo = new CardInfo(); // 设置会员卡idcardInfo.setId(1); // 设置会员卡类型:1.期限卡; 2.次数卡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") ListcardInfos); }
配置文件:
UPDATE staff_cardend_time="2022-05-01 22:50:59",update_time=NOW(), rest_count =11 WHERE id=#{card.id};
总结 到此这篇关于mysql中update按照多重条件进行更新处理的文章就介绍到这了,更多相关mysql update按多重条件更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- mysql如何对已经加密的字段进行模糊查询详解
- MySQL索引介绍及优化方式
- MySQL中使用序列Sequence的方式总结
- mysql慢查询日志轮转_MySQL慢查询日志实操
- mysql|mysql or走索引加索引及慢查询的作用
- MySQL中DATE_FORMAT()函数将Date转为字符串
- MySQL中|MySQL中 LBCC 和 MVCC 的理解及常见问题示例
- 一文教会你在MySQL中使用DateTime
- 生?命?中?的?那?个?人?
- 机会来了!中国魔笛迎来上位最好时机,维特塞尔不回来,他来扛旗