標籤:
mysql 定時任務從5.1版本開始引入,又叫做臨時觸發器,但是與普通觸發器不同的是,普通觸發器是通過操作資料表的每行資料而觸發的事件,而它是通過時間點或者時間周期觸發
先來看一下它的文法:
DELIMITER $$-- SET GLOBAL event_scheduler = ON$$ -- required for event to execute but not create CREATE /*[DEFINER = { user | CURRENT_USER }]*/ EVENT `event1`ON SCHEDULE /* uncomment the example below you want to use */ -- scheduleexample 1: run once -- AT ‘YYYY-MM-DD HH:MM.SS‘/CURRENT_TIMESTAMP { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] } -- scheduleexample 2: run at intervals forever after creation -- EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] -- scheduleexample 3: specified start time, end time and interval for execution /*EVERY 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] STARTS CURRENT_TIMESTAMP/‘YYYY-MM-DD HH:MM.SS‘ { + INTERVAL 1[HOUR|MONTH|WEEK|DAY|MINUTE|...] } ENDS CURRENT_TIMESTAMP/‘YYYY-MM-DD HH:MM.SS‘ { + INTERVAL 1 [HOUR|MONTH|WEEK|DAY|MINUTE|...] } *//*[ON COMPLETION [NOT] PRESERVE][ENABLE | DISABLE][COMMENT ‘comment‘]*/DO BEGIN (sql_statements) END$$DELIMITER ;
基本上通過上面的文法說明已經瞭解到如何使用了,下面針對每種方式可以再寫個小栗子
1,在某個時間點觸發(執行一次):
DELIMITER $$CREATE EVENT `bdhp`.`e_e1`ON SCHEDULE /*只執行一次*/ /*AT ‘2015-02-03 16:07.00‘*//*某一時間點*/ /* AT ‘2015-02-03 16:47.20‘ + INTERVAL 40 second*//*某一時間點 + 一段時間*/ AT CURRENT_TIMESTAMP+ INTERVAL 40 SECOND/*目前時間點 + 一段時間*/ DO BEGIN INSERT INTO t_sys_log(sn)VALUES(‘55555‘); END$$DELIMITER ;
2,按周期執行,無限次數
DELIMITER $$CREATE EVENT `e_e2`ON SCHEDULE EVERY 1 MINUTEDO BEGIN INSERT INTO t_sys_log(sn)VALUES(‘55555‘); END$$DELIMITER ;
3,在某一時間段內,按周期執行(ends 不寫則表示從某一時間點開始執行)
DELIMITER $$CREATE EVENT `e_e3`ON SCHEDULE EVERY 1 SECOND STARTS CURRENT_TIMESTAMP ENDS ‘2015-02-03 16:15.00‘DO BEGIN INSERT INTO t_sys_log(sn,USER_NAME)VALUES(‘test‘,‘ttt-55‘); END$$DELIMITER ;
mysql-定時任務