Mysql创建定时任务执行存储过程。

首先就是需要了解一下Mysql的存储过程,如果不太熟悉的朋友建议先浏览一下https://www.runoob.com/w3cnote/mysql-stored-procedure.html

例子:

drop procedure if exists workReportAnalysis;
/* reportRecordType 1:分析前一天日报提交情况 2:分析上周周报提交情况 3:分析上月月报提交情况*/
create procedure workReportAnalysis(in reportRecordType int)
begin
    declare b int default 0; /*是否达到记录的末尾控制变量*/
    declare _complete int(2);
    declare _factoryid varchar(64);
    declare cur_1 cursor for
        select f.id  factoryid,
               exists(select 1
                      from biz_report_record r
                      where factory_id = f.id
                        and (
                              (r.report_type = reportRecordType and
                               date_format(f.create_time, '%y-%m-%d') =
                               date_format(date_sub(curdate(), interval 1 day), '%y-%m-%d'))
                              or (r.report_type = reportRecordType and
                                  date_format(f.create_time, '%y') =
                                  date_format(date_sub(curdate(), interval 1 day), '%y') and
                                  WEEK(f.create_time, 1) = WEEK(date_sub(curdate(), interval 1 day), 1) - 1)
                              or (r.report_type = reportRecordType and date_format(f.create_time, '%Y%m') =
                                                                       date_format(date_sub(now(), interval 1 month), '%Y%m'))
                          )
                   ) complete
        from biz_factory f
        where f.status = 1
          and not exists(select 1
                         from biz_report_record_analysis ra
                         where ra.factory_id = f.id
                           and ra.report_record_type = reportRecordType
                           and ra.create_date = date_sub(curdate(), interval 1 day));

    declare continue handler for not found set b = 1;
    open cur_1;
    fetch cur_1 into _factoryid, _complete; /*获取第一条记录*/
    while b <> 1
        do
            insert into biz_report_record_analysis(id, factory_id, create_date, complete, report_record_type)
                value (replace(uuid(), '-', ''), _factoryid, date_sub(curdate(), interval 1 day), _complete,
                       reportRecordType);
            fetch cur_1 into _factoryid, _complete; /*取下一条记录*/
        end while;
    close cur_1;
end;

然后写一个定时任务,定时执行存储过程:

  1.    执行以下查询语句查看是否开启
  2. SHOW VARIABLES LIKE 'event_scheduler';
  3.  显示 event_scheduler 为OFF时用一下命令开启
  4. set global event_scheduler=1;

    (注:以上改法会在数据库重启以后恢复为原来状态,要想数据存重启也开启event_scheduler,则需要修改配置文件my.ini。修改如下,修改完成后重启mysql服务即可)

    [mysqld]event_scheduler=ON //这一行加入mysqld标签下
  5. 创建定时器

     

/*每天凌晨一点执行*/
drop event if exists daily_analysis_event;
create event if not exists daily_analysis_event
    on schedule every 1 day starts date_add(date_add(curdate(), interval 1 day), interval 1 hour)
    on completion preserve enable
    do call workreportanalysis(1);

/*每周一凌晨一点执行*/
drop event if exists weekly_analysis_event;
create event if not exists weekly_analysis_event
    on schedule every 1 week starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 week ),interval 1 hour)
    on completion preserve enable
    do call workreportanalysis(2);

/*每月一号凌晨一点执行*/
drop event if exists monthly_analysis_event;
create event if not exists monthly_analysis_event
    on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour)
    on completion preserve enable
    do call workreportanalysis(3);

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值