原先,LAMP的程序员为了完成一些周期性的数据库操作任务,总是不得不借助于操作系统的帮助,比如Windows的计划任务,或者Linux的contab。MySQL5.1终于新增了Event Scheduler功能,可以直接在后台实现一下定时性的作业。但不知道什么原因,在英文版的参考手册中,位于触发器和视图之间的第20章Event Scheduler,在中文版中被删减掉了,手册的其他部分也没有丝毫提到它,好像它根本就不存在一样,所以它的知名度不是很高。有兴趣的读者可以参考
http://dev.mysql.com/doc/refman/5.1/en/events.html获得比较完整的帮助。
1.1 开启
MySQL的Event Scheduler是根据预先安排的计划进行数据库操作的数据库对象,可以看作是一种“时间触发器”。Event实际上是被一个特殊的event scheduler线程执行的,假如它正在运行的话,可以通过SHOW PROCESSLIST命令看到它。全局变量event_scheduler用来设定是否服务器端运行执行计划任务,该变量有如下三种值:
OFF:计划任务处于停止状态,event scheduler线程没有运行。是event_scheduler的默认值;
ON:计划任务处于运行状态,event scheduler线程启动,并执行所有的计划任务;
DISABLED:该值将致使计划任务不可运行
你可以使用下列的任意一句开启计划任务:
SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1;
1.2 创建
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:
AT指定的是一个一次性计划,后面跟着一个时间戳,后续的sql语句将在指定的时间被执行一次;
EVERY指定的是一个周期性计划,在该子句中可以指定从某时间点到某时间点期间,每隔某周期就执行一次该任务。
(5) 任务整个执行完毕后,该计划任务对象是否还在数据库中保留。默认不保留
(6) 有效或失效。默认有效
(7) 真正要执行的语句
1.3 实例
首先是一个一次性计划任务的例子,该任务在指定的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以上版本才支持该对象。
原文地址:
http://hi.baidu.com/vincent_luo/blog/item/fbb7575cab710247fbf2c088.html
分享到:
相关推荐
数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178...使用EXPLAIN语句检查SQL语句 187 8.3.2 SELECT 查询的速度 188 8.3.2.1 MySQL怎样优化WHERE子句 188 8.3.2.2 MySQL怎样优化LEFT ...
数据库优化 177 8.1 索引的使用 178 8.1.1索引对单个表查询的影响 178...使用EXPLAIN语句检查SQL语句 187 8.3.2 SELECT 查询的速度 188 8.3.2.1 MySQL怎样优化WHERE子句 188 8.3.2.2 MySQL怎样优化LEFT ...
━━━欢迎使用 护卫神·好备份[Ver3.3]━━━ 1、本软件为护卫神旗下免费软件,您可以任意使用和传播,但请勿用于商业用途...以上信息均来自官方网站,此处仅转载,内容真实有效,因为好用,所以推荐,若有侵权请联系
下面是使用JDBC连接MySql的一个小的教程 1、查找驱动程序 MySQL目前提供的java驱动程序为Connection/J,可以从MySQL官方网站下载,并找到mysql-connector-java-3.0.15-ga-bin.jar文件,此驱动程序为纯java驱动...
java8 集合源码分析 Java学习指南 目录 Java 并发 JVM JAVA8 设计模式 编程规范 ...Mysql ...SpringBoot整合篇(整合Redis、RocketMQ、定时任务等,后续补充。...若你喜欢本站内容,欢迎转载,但请注明出处,且勿用于
MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...
同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该文献之人无任何关系。谢谢合作 本书共分4部分,从xml、servlet、jsp和应用的角度向读者展示了java web开发中各种技术的应用,循序渐进地...