mysql 定時任務job


 

 業務: 定時處理已過期的憑證

#查看當前是否已開啟事件調度器
show variables like 'event_scheduler';

#要想保證能夠執行event事件,就必須保證定時器是開啟狀態,默認為關閉狀態
set global event_scheduler =1;
#或者set GLOBAL event_scheduler = ON;

# 選擇庫
use TRAVEL_CARD_UAT;

# 如果原來存在該名字的任務計划則先刪除
drop event if exists SetEVToInvalidStatus_AtNight_0100;

delimiter $$
 # 每天晚上01:00
create event SetEVToInvalidStatus_AtNight_0100  
#on schedule every 1 DAY   starts timestamp '2017-04-24 10:00:00'
# 測試使用 1 hour
on schedule every 1 hour starts timestamp '2017-04-24 10:00:10'
do
begin
    start transaction;
    set @timenow=now(); #開始事務
    # 表1
    update tb_ev_stocks set FSTATUS=3 where FSTATUS=0 and FVALIDENDDATE < @timenow ;  
    # 表2
    update tb_ev_stock_details set FSTATUS=3 where FSTATUS=0 and FVALIDENDDATE < @timenow ;
    commit;  #提交事務

end  $$
delimiter ;

# 停止
ALTER EVENT SetEVToInvalidStatus_AtNight_0100 DISABLE;
# 開啟
alter event SetEVToInvalidStatus_AtNight_0100 enable;

# 查看狀態
select * from mysql.event


注意:真實的開發環境中,會遇到mysql服務重啟或者斷電的情況,此時則會出現事件調度器被關閉的情況,所有事件都不在起作用,要想解決這個辦法,則需要在mysql.ini文件中加入event_scheduler = ON; 的語句

 

 

 創建事件語法:

CREATE EVENT [IF NOT EXISTS] event_name  
ON SCHEDULE schedule  
[ON COMPLETION [NOT] PRESERVE]  
[ENABLE | DISABLE]  
[COMMENT 'comment']  
DO sql_statement;  
  
schedule:  
AT TIMESTAMP [+ INTERVAL INTERVAL]  
| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]  
  
INTERVAL:  
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |  
            WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |  
            DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}  

 修改事件語法:

ALTER EVENT event_name  
[ON SCHEDULE schedule]  
[RENAME TO new_event_name]  
[ON COMPLETION [NOT] PRESERVE]  
[COMMENT 'comment']  
[ENABLE | DISABLE]  
[DO sql_statement] 

 

參考文獻:http://blog.csdn.net/zlp5201/article/details/38309095

 


免責聲明!

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



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