需求描述
每月初更新一次用戶表中的分數
- 編寫存儲過程
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;
如有問題請及時指出