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 $