MySQL設置定時事件

需求描述
每月初更新一次用戶表中的分數

  • 編寫存儲過程
DELIMITER // 
create procedure rush_mark_every_mon()
begin
drop table if exists temp;
create temporary table temp(
select user_id,count(distinct problem_id) from solution  WHERE date_format(in_date,'%Y-%m') = date_format(now(),'%Y-%m') and result = 4 group by user_id order by count(distinct problem_id) desc);
update users set score=score+100 where user_id in (select t.user_id from (select temp.user_id from temp limit 0,3) as t);
update users set score=score+60 where user_id in (select t.user_id from (select temp.user_id from temp limit 3,5) as t);
update users set score=score+30 where user_id in (select t.user_id from (select temp.user_id from temp limit 8,7) as t);
END;
//
DELIMITER ;
  • 設置時區
set time_zone = '+8:00';
  • 開啓事件調度器(服務器重啓事件調度器會自己關閉,如果要設置重啓無影響請更改my.ini中的配置)
set GLOBAL event_scheduler = 1;
  • 創建定時任務
CREATE  EVENT `update_every_score_Month` ON SCHEDULE EVERY 1 MONTH STARTS '2020-01-01 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO CALL rush_mark_every_mon();
  • 查看定時任務
SELECT * FROM information_schema.`EVENTS`;
  • 刪除定時任務
DROP EVENT update_every_score_Month;

如有問題請及時指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章