mysql中update按照多重条件进行更新处理的方案

 更新时间:2022年09月09日 16:23:54   作者:卖柴火的小伙子  
更新数据是使用数据库时最重要的任务之一,下面这篇文章主要给大家介绍了关于mysql中update按照多重条件进行更新处理的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

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 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>

注意写法:只对于期限卡才更新余额,次数卡余额不更新,也就是次数卡的余额rest_count字段不进行更新,直接写ELSE rest_count,如果次数卡余额更新为其他金额,则ELSE 后面写具体的余额值.

2.2 使用if标签

组装会员卡列表信息,将每个会员卡的卡类型进行设置

  ArrayList<CardInfo> cardList= new ArrayList<>();
        CardInfo cardInfo = new CardInfo();
        // 设置会员卡id
        cardInfo.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") 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>

总结

到此这篇关于mysql中update按照多重条件进行更新处理的文章就介绍到这了,更多相关mysql update按多重条件更新内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql事务处理详解

    Mysql事务处理详解

    什么是事务处理呢??事务处理是用来维护数据库的完整性的,它保证成批的MySQL操作要么完全执行,要么完成不执行。
    2017-08-08
  • mysql 索引详细介绍

    mysql 索引详细介绍

    这篇文章主要介绍了mysql 索引详细介绍的相关资料,需要的朋友可以参考下
    2016-09-09
  • MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎详解

    MySQL高级学习笔记(三):Mysql逻辑架构介绍、mysql存储引擎详解

    这篇文章主要介绍了Mysql逻辑架构介绍、mysql存储引擎,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • MySQL的错误日志查看方式

    MySQL的错误日志查看方式

    这篇文章主要介绍了MySQL的错误日志查看方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • MySQL中IO问题的深入分析与优化

    MySQL中IO问题的深入分析与优化

    据库作为存储系统,所有业务访问数据的操作都会转化为底层数据库系统的IO行为,下面这篇文章主要给大家介绍了关于MySQL中IO问题的深入分析与优化的相关资料,需要的朋友可以参考下
    2022-04-04
  • 详解MySQL8.0原子DDL语法

    详解MySQL8.0原子DDL语法

    这篇文章主要介绍了详解MySQL8.0原子DDL语法的相关资料,帮助大家更好的理解和学习使用MySQL,感兴趣的朋友可以了解下
    2021-03-03
  • MySQL中having和where的区别及应用详解

    MySQL中having和where的区别及应用详解

    这篇文章主要给大家详细介绍了MySQL中having和where的区别以及他们的使用方法,文中有相关的代码示例,具有一定的参考价值,需要的朋友可以参考下
    2023-06-06
  • MySQL Binlog日志的记录模式写入机制文件操作详解

    MySQL Binlog日志的记录模式写入机制文件操作详解

    这篇文章主要介绍了MySQL Binlog日志的记录模式写入机制文件操作详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • dos或wamp下修改mysql密码的具体方法

    dos或wamp下修改mysql密码的具体方法

    这篇文章主要介绍了dos或wamp下修改mysql密码的具体方法,有需要的朋友可以参考一下
    2013-12-12
  • 一键安装mysql5.7及密码策略修改方法

    一键安装mysql5.7及密码策略修改方法

    这篇文章主要介绍了一键安装mysql5.7及密码策略修改方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-10-10

最新评论