简单的mysql定时器 执行存储过程

1 篇文章 0 订阅
1 篇文章 0 订阅

--创建定时器

CREATE EVENT event_statistics

--设置为每天触发

ON SCHEDULE EVERY 1 DAY

--起始时间

STARTS '2015-01-29 02:00:00'

ON COMPLETION PRESERVE DO

--调用存储过程

CALL statistics();



create procedure statistics() 
       begin       
                   declare done boolean default 0;             
                   declare o varchar(50);  
                   declare oldloginuser int;                 
                   declare allloginuser int;                  
                   declare newloginuser int;  
                   declare alluser int;
                   declare installuser int; 
                   declare authinstalluser int;  
                   declare noauthuser int; 
                   declare monthuser int; 
                   declare weekuser int;
                   declare thrice int;                   
                   declare thricestr varchar(50); 
                   declare fifth int;
                   declare tentimes int;                     
                   declare done_1 boolean default 0;
                   declare app_name varchar(100);
                   declare cursorforstation cursor             
                   for                  
                   select no from t_wifi_station;                      
                   declare continue handler for sqlstate '02000' set done=1;                   
                   open cursorforstation;                   
                   repeat   
                   if o!="" then                                                        
                         select count(distinct userid) into oldloginuser from t_user_login_log where
                         stationno = o and date(logintime) < date_sub(curdate(),interval 1 day) and userid 
                         in
                         (select userid from t_user_login_log where 
                         stationno = o and date(logintime) = date_sub(curdate(),interval 1 day));                  
                         select count(distinct userid) into allloginuser from t_user_login_log where
                         stationno = o and date(logintime) = date_sub(curdate(),interval 1 day);  
                         set newloginuser = allloginuser -  oldloginuser;
                         select count(1) into allloginuser from t_user_login_log where
                         stationno = o and date(logintime) = date_sub(curdate(),interval 1 day);
                         select count(1) into alluser from t_wifi_user where
                         stationno = o and date(installtime) <= date_sub(curdate(),interval 1 day);                         
                         select count(1) into installuser from t_wifi_user where stationno = o
                         and date(installtime) = date_sub(curdate(),interval 1 day);                          
                         select count(1) into authinstalluser from t_wifi_user where stationno = o
                         and status =1 and date(installtime) = date_sub(curdate(),interval 1 day);                         
                         set noauthuser = installuser - authinstalluser;                         
                         select count(1) into monthuser from t_user_login_log where 
                         date(logintime) < date_sub(curdate(),interval 1 month) and userid 
                         in
                         (select userid from t_user_login_log where  stationno = o 
                         and date(logintime) = date_sub(curdate(),interval 1 day));                         
                         select count(1) into weekuser from t_user_login_log where date(logintime) < date_sub(curdate(),interval 1 week) and userid 
                         in
                         (select userid from t_user_login_log where stationno = o 
                         and date(logintime) = date_sub(curdate(),interval 1 day));
                         insert into t_statistics(staionno,loginnum,olduser,newuser,usertotal,install,authnum,noauthnum,monthuser,weekuser,gettime)
                         values (o,allloginuser,oldloginuser,newloginuser,alluser,installuser,authinstalluser,noauthuser,monthuser,weekuser,date_sub(curdate(),interval 1 day));   
                         
                         select count(*) into thrice from (select count(1) from t_user_login_log where stationno = o and date(logintime) = date_sub(curdate(),interval 1 day)
                         group by userid having count(1) >=3) as mytable;                         
                         insert into t_rate(staionno,numkey,numvalue,gettime) values(o,3,thrice,date_sub(curdate(),interval 1 day));                         


                         select count(*) into fifth from (select count(1) from t_user_login_log where stationno = o and date(logintime) = date_sub(curdate(),interval 1 day)--日期等于昨天的数据
                         group by userid having count(1) >=5) as mytable;                         
                         insert into t_rate(staionno,numkey,numvalue,gettime) values(o,3,fifth,date_sub(curdate(),interval 1 day));                         
                                                  
                         select count(*) into tentimes from (select count(1) from t_user_login_log where stationno = o and date(logintime) = date_sub(curdate(),interval 1 day)
                         group by userid having count(1) >=10) as mytable;                         
                         insert into t_rate(staionno,numkey,numvalue,gettime) values(o,3,tentimes,date_sub(curdate(),interval 1 day));--昨天


                   end if;                 
                   fetch cursorforstation into o;                  
                   until done 
                   end repeat;                   
                   close cursorforstation;
                   call appstapro();                                     
       end     
create procedure appstapro() 
       begin        
             declare done_1 boolean default 0;
             declare app_name varchar(100);
             declare app_count int;
             declare app_statistics cursor
             for
             select appname,count(1) coun from t_wifi_userapp
             group by appname order by count(1) desc limit 0,30; 
             declare continue handler for sqlstate '02000' set done_1=1;
                   delete from t_applist;      
                   open app_statistics;
                   repeat
                   if app_name!="" then 
                       insert into t_applist(name,downnum,gettime)
                       values(app_name,app_count,date_sub(curdate(),interval 1 day));    --昨天的日期                              
                   end if;
                   fetch app_statistics into app_name,app_count;                  
                   until done_1 
                   end repeat;                   
                   close app_statistics;              
       end 


show events;

查看定时器状态
SHOW VARIABLES LIKE 'event_scheduler'

//开启定时器
 SET GLOBAL event_scheduler = 1;



要在MySQL创建一个定时执行存储过程,您可以按照以下步骤进行操作: 1. 首先,您需要创建一个定时器执行存储过程函数。可以使用以下语句创建一个定时器,并设置执行的时间间隔: ```sql CREATE EVENT delete_data ON SCHEDULE EVERY 10 SECOND DO CALL delete_data(); ``` 2. 接下来,您需要声明一个存储过程。您可以使用以下语句创建一个名为`insert_dept`的存储过程,并在其添加随机数据到`dept`表: ```sql DELIMITER $$ CREATE PROCEDURE `insert_dept`(max_num INT) BEGIN DECLARE i INT DEFAULT 0; SET autocommit = 0; REPEAT SET i = i + 1; INSERT INTO dept (id, name) VALUES (rand_num(1, 500000), 'ljf'); UNTIL i = max_num END REPEAT; COMMIT; END$$ ``` 3. 最后,您可以创建一个名为`test_d2`的存储过程,其包含需要定时执行的操作。以下是一个示例,创建一个名为`test_ddd`的表,并将当前时间插入其: ```sql CREATE PROCEDURE test_d2() BEGIN DROP TABLE IF EXISTS test_ddd; CREATE TABLE test_ddd AS SELECT NOW(); END; ``` 通过以上步骤,您可以在MySQL创建一个定时执行存储过程。请注意,具体的语法和细节可能会因MySQL版本而有所不同,以上示例仅供考。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql创建定时任务执行存储过程](https://blog.csdn.net/YXWik/article/details/127263626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mysql存储过程实现定时任务执行](https://blog.csdn.net/u011066470/article/details/123946434)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值