Mysql 定时器 、存储过程和游标

博客介绍了MySQL定时事件,即每天零点重置用户下载次数。指出SQL执行有时需考虑业务规则进行智能处理,封装操作有简化、复用、降耦合和高性能等优点。还说明了实现定时重置下载次数的步骤,包括获取用户列表、更新下载次数,以及创建存储过程和定时事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql定时事件:每天零点重置下载次数

大部分时候,我们所使用都是单条SQL,用来针对一个或多表连接。但是也有情况,是据判断先对表A执行操作,变动后再结合表B进行操作。即SQL的执行可能需要考虑包含业务规则在内的智能处理。封装操作的好处就不过多说明,无非是简化,复用,降低耦合等,同时,它还具有更高的性能。

 

考虑这种业务情况,定时任务,每日零点重置用户下载次数:

  • 获得当前用户列表当前用户重置下载次数信息
  • 更新重置当前用户可使用下载次数
  • 基本语句

    创建存储过程

  • 
    delimiter $
    CREATE PROCEDURE updateLimitnum()
    BEGIN
        DECLARE  cid INT;  
        DECLARE  cmaxlimitnum  INT; 
        -- 遍历数据结束标志
        DECLARE done INT DEFAULT FALSE;
        -- 游标
        DECLARE cur_account CURSOR FOR select id,maxlimitnum from meyoo_user;
        -- 将结束标志绑定到游标
        DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
        
        -- 打开游标
        OPEN  cur_account;     
        -- 遍历
        REPEAT
                -- 取值 取多个字段
                FETCH  NEXT from cur_account INTO cid,cmaxlimitnum;
           		update meyoo_user set limitnum = cmaxlimitnum where id = cid;
           		
        UNTIL done END REPEAT;
        CLOSE cur_account;
    END $

    创建定时事件

  • 
    从2018-01-01 00:00:00后每天执行
    DELIMITER $
    CREATE EVENT IF NOT EXISTS updatelimit_event   
        ON SCHEDULE EVERY 1 DAY STARTS '2018-01-01 00:00:00' 
        ON COMPLETION PRESERVE ENABLE   
        DO 
        BEGIN
     		CALL updateLimitnum();
        END $

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值