業務: 定時處理已過期的憑證
#查看當前是否已開啟事件調度器 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