mysql定時任務用到存儲過程和定時任務


需求:

    需要將t_app_message中的消息(將要被發送的消息)給每一個學生發送一遍,並且在發送完成后,將消息置為已發送狀態已發送狀態。

一言不合上代碼

 1 /*刪除存儲過程*/
 2 drop procedure if exists proc_sendAllMsg; 
 3 /*創建存儲過程*/ 
 4 CREATE PROCEDURE proc_sendAllMsg()
 5 BEGIN
 6 /*先插入*/
 7 INSERT t_base_message (sid,mid)
 8 SELECT a.id,b.id from t_base_student  a 
 9 INNER JOIN t_app_message b 
10 where a.School_id = 1 and  b.sendtime<=NOW() and b.sendstatus = 0;
11 UPDATE t_app_message  SET sendstatus = 1 where sendtime <=NOW();
12 UPDATE t_app_message  SET showstatus = 1 where endtime <=NOW();
13 end 
14 
15 /*指定數據庫*/ 
16 use xscp;
17 /*刪除原有的定時任務*/
18 drop event if exists event_sendAllMsg;  
19 
20 CREATE EVENT event_sendAllMsg ON SCHEDULE EVERY 30 second starts  '2017-12-11 00:00:00' 
21 DO 
22 CALL proc_sendAllMsg; /*調用存儲過程*/

 

1 查看event是否開啟 : SHOW VARIABLES LIKE '%event_sche%';
2 將事件計划開啟 : SET GLOBAL event_scheduler = 1;
3 將事件計划關閉 : SET GLOBAL event_scheduler = 0;
4 關閉事件任務 : ALTER EVENT eventName ON COMPLETION PRESERVE DISABLE;
5 開啟事件任務 : ALTER EVENT eventName ON COMPLETION PRESERVE ENABLE;
6 查看事件任務 : SHOW EVENTS ;
View Code

備注:在event事件中:ON SCHEDULE 計划任務,有兩種設定計划任務的方式:
 
1. AT 時間戳,用來完成單次的計划任務。

2. EVERY 時間(單位)的數量時間單位[STARTS 時間戳] [ENDS時間戳],用來完成重復的計划任務。

在兩種計划任務中,時間戳可以是任意的TIMESTAMP 和DATETIME 數據類型,時間戳需要大於當前時間。

在重復的計划任務中,時間(單位)的數量可以是任意非空(Not Null)的整數式,時間單位是關鍵詞:YEAR,MONTH,DAY,HOUR,MINUTE 或者SECOND。

提示: 其他的時間單位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建議使用這些不標准的時間單位。

 [ON COMPLETION [NOT] PRESERVE]
 
ON COMPLETION參數表示"當這個事件不會再發生的時候",即當單次計划任務執行完畢后或當重復性的計划任務執行到了ENDS階段。而PRESERVE的作用是使事件在執行完畢后不會被Drop掉,建議使用該參數,以便於查看EVENT具體信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM