MySQL简单定时任务

in 默认分类PHPLinux with 0 comment

1200px-MySQL.svg.png

定时任务

简述

MySQL属于中小型数据库系统,它的事件调度器EventScheduler是在MySQL5.1才开始引入,事件调度器是在MySQL5.1中新增的另一个特色功能,可以作为定时任务调度器,取代部分原先只能用操作系统任务调度器(如linux的crontab)才能完成的定时功能。事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。

查看开启调度器

创建

Event Scheduler作为一种数据库对象,其增删改的DDL语句与其他对象非常相似,无非CREATE、ALTER、DROP等,创建的基本语法是:

CREATE EVENT        (1)
[IF NOT EXISTS]        (2)
event_name         (3)
ON SCHEDULE schedule      (4)
[ON COMPLETION [NOT] PRESERVE]   (5)
[ENABLE | DISABLE]       (6)
[COMMENT 'comment']       (7)
DO sql_statement        (8)

逐条介绍:
(1) 创建Event嘛,这俩关键字当然不能少了
(2) 如果不存在同名的数据库对象才创建
(3) 计划任务的名字。作为数据库对象,都有一个本库内唯一的名字做标识
(4) 计划任务的计划,重点就在这儿。有两个关键字来设定任务的执行计划:AT和EVERY:

(5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
(6) 有效或失效。默认有效
(7) 真正要执行的语句

实例

首先是一个一次性计划任务的例子,该任务在指定的2008-02-06 23:59:00这个时间点,向messages表中插入一条记录:

CREATE EVENT e_totals
ON SCHEDULE AT '2006-02-10 23:59:00'
DO
INSERT INTO messages VALUES (null, 'admin', '过年了!', '祝大家鼠年发大财!!!', '127.0.0.1',NOW());

下面是一个周期性计划任务的例子,该任务在2008-02-06 23:59:00开始的一年内,每隔1小时就删除掉messages表的早先的10条记录:

CREATE EVENT e_hourly
ON SCHEDULE
EVERY 1 HOUR STARTS '2007-02-10 23:59:00' ENDS '2008-02-10 23:59:00'
DO
DELETE FROM messages limit 10;

计划任务属于数据库服务器端的对象,创建好后,只要开启了event_scheduler,就可以自动触发执行了,不用在前台进行任何干预。当然一定要记住,只有MySQL5.1以上版本才支持该对象。

Comments are closed.