服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - Mysql - mysql中update按照多重条件进行更新处理的方案

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

2022-11-10 16:33卖柴火的小伙子 Mysql

更新数据是使用数据库时最重要的任务之一,下面这篇文章主要给大家介绍了关于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为次数卡)。

会员卡表信息:

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

2.处理方案

2.1 使用update case when

sql如下:

?
1
2
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)

配置文件写法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<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标签

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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接口:

?
1
2
3
4
public interface CardMapper {
    // 更新会员卡信息
    void updateRestCount(@Param("cardList") List<CardInfo> cardInfos);
}

配置文件:

?
1
2
3
4
5
6
7
8
9
10
11
12
<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按多重条件更新内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43401380/article/details/124416452

延伸 · 阅读

精彩推荐
  • Mysqlmysql视图之创建可更新视图的方法详解

    mysql视图之创建可更新视图的方法详解

    这篇文章主要介绍了mysql视图之创建可更新视图的方法,结合实例形式分析了mysql可更新视图的具体创建、使用方法及相关操作注意事项,需要的朋友可以参考...

    luyaran3602020-12-21
  • MysqlWindows 64位重装MySQL的教程(Zip版、解压版MySQL安装)

    Windows 64位重装MySQL的教程(Zip版、解压版MySQL安装)

    这篇文章主要介绍了Windows 64位,重装MySQL的方法(Zip版、解压版MySQL安装),本文给大家介绍的非常详细,具有一定的参考借鉴价值需要的朋友可以参考下...

    看戏走心6862021-01-08
  • MysqlMySQL中使用流式查询避免数据OOM

    MySQL中使用流式查询避免数据OOM

    这篇文章主要介绍了MySQL中使用流式查询避免数据OOM,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们...

    zlt200012112021-03-28
  • MysqlMySQL 数据类型详情

    MySQL 数据类型详情

    这篇文章主要介绍了MySQL 数据类型,数值类型分类又分严格数值类型和近似数值数据类型,下面文章围绕MySQL 数据类型展开内容,需要的朋友可以参考一下...

    随风去远方9832021-12-03
  • MysqlMySQL带你秒懂索引下推

    MySQL带你秒懂索引下推

    如果你在面试中,听到MySQL5.6”、“索引优化” 之类的词语,你就要立马get到,这个问的是“索引下推”。本文就来分分享这个小知识点索引下推...

    三分恶10672021-11-12
  • Mysql一次Mysql死锁排查过程的全纪录

    一次Mysql死锁排查过程的全纪录

    在测试环境测试给用户并发发送卡券时,出现了死锁,通过查找相关的资料解决了这个,所以想着总结出来,所以下面这篇文章主要是关于一次Mysql死锁排...

    MYSQL教程网5332020-07-18
  • MysqlMysql中FIND_IN_SET()和IN区别简析

    Mysql中FIND_IN_SET()和IN区别简析

    这篇文章主要介绍了Mysql中FIND_IN_SET()和IN区别简析,设计实例代码,具有一定参考价值。需要的朋友可以了解。 ...

    JavaDynamic5222020-08-16
  • Mysqlwindows 10 下mysql-8.0.17-winx64的安装方法图解

    windows 10 下mysql-8.0.17-winx64的安装方法图解

    这篇文章主要介绍了windows 10 mysql-8.0.17-winx64的方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    因心2912020-12-02