MySQL5.1以上版本支持event,先查看数据库是否开启计划认为: mysql> show variables like ‘%event%’; +———————+——-+ | Variable_name | Value | +———————+——-+ | event_scheduler | OFF | +———————+——-+ 使用下列的任意一句开启计划任务: SET GLOBAL event_scheduler = ON; SET @@global.event_scheduler = ON; SET GLOBAL event_scheduler = 1; — 0代表关闭 SET @@global.event_scheduler = 1; 创建event语法: CREATE EVENT [ IF NOT EXISTS ] event_name ON SCHEDULE AT|EVERY [ ON COMPLETION [ NOT ] PRESERVE ] [ ENABLED | DISABLED ] –状态,默认是有效状态。 [ COMMENT 'comment' ] –注释说明 DO sql_statement; 主要功能说明: AT 表示指定一个时间只执行一次。 EVERY 周期性计划,可指定计划开始时间 STARTS 和结束时间 ENDS,执行具体时间周期可以为:YEAR, MONTH, WEEK, DAY, HOUR, MINUTE, SECOND。 COMPLETION计划任务完毕后,该计划任务对象是否还在数据库中保留。默认不保留。 实例0: 每5分钟删除sms表上面ybmid为空白且createdate距现时间超过5分钟的数据。 USE test; CREATE EVENT event_delnull ON SCHEDULE EVERY 5 MINUTE STARTS ’2010-07-10 00:00:00′ ENDS ’2011-02-10 00:00:00′ DO DELETE FROM sms WHERE ybmid=” AND TIMEDIFF(SYSDATE(),createdate)>’00:05:00′; 实例1: 每天调用存储过程一次: mysql> delimiter // mysql> create event updatePTOonSunday -> on schedule every 1 day -> do -> call updatePTO(); -> // Query OK, 0 rows affected (0.02 sec) 这里updatePTO()是我数据库里自定义的存储过程 查看任务计划: SELECT * FROM mysql.event\G 更改计划任务 语法: ALTER EVENT [DEFINER = { user | CURRENT_USER }] #更改缺省用户 event_name [ON SCHEDULE schedule] #更改调度时间 [RENAME TO new_event_name] #计划任务改名 [ON COMPLETION [NOT] PRESERVE] #更改一次运行结束后的行为 [ENABLE | DISABLE | SLAVESIDE_DISABLED] #更改计划任务状态 [COMMENT 'comment'] #修改注释 [DO sql_statement] #修改计划执行体 三、删除计划任务 语法: DROP EVENT [IF EXISTS] event_name 四、开启MySQL计划任务功能支持 MySQL中对计划任务的支持是采用线程调度检测计划任务的。要此功能开启计划任务才会执行。查看调度器状态命令如下: SHOW [FULL] PROCESSLIST\G 如下是没有开启的状态: mysql> SHOW FULL PROCESSLIST\G *************************** 1. row *************************** Id: 10 User: root Host: localhost:4823 db: mysql Command: Query Time: 0 State: NULL Info: SHOW FULL PROCESSLIST 1 row in set (0.00 sec) 通过如下全局配置的设置来开启或关闭调度器: SET GLOBAL event_scheduler = ON/OFF/1/0; –开/关 或SET @@global.event_scheduler = ON/OFF/1/0; 五、示例如下: 其中计划任务体内可以是简单语句,也可以调用存储过程 delimiter // drop event if exists createmonsterevent// create event createmonsterevent on schedule every 20 minute starts CURRENT_TIMESTAMP + INTERVAL 10 minute ENABLE COMMENT ‘刷怪计划任务’ DO begin #20分钟 Call createmonster(date_sub(sysdate(),INTERVAL 24 minute), date_sub(sysdate(),INTERVAL 2 minute)); end; // delimiter ; |