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

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 $

猜你喜欢

转载自blog.csdn.net/qingzijin2010/article/details/82221698
今日推荐