我们都知道windows的计划任务和linux的crontab都是用来实现一些周期性的任务和固定时间须要运行的任务。

在mysql5.1之前我们完毕数据库的周期性操作都必须借助这些操作系统实现。

在mysql5.1及其之后的版本号添加了计划任务的功能(mysql事件调度器Event
Scheduler)。

    事件调度器是定时触发运行的。在这个角度上也能够称作是"暂时的触发器"。

触发器仅仅是针对某个表产生的事件运行一些语句。而事件调度器则是在某一个(间 隔)时间运行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。

启用事件调度器后。拥有
SUPER 权限的账户运行 SHOW PROCESSLIST 就能够看到这个线程了。

    一、事件调度器event_scheduler的开启:

    mysqlserver时间调度器的开启是由一个名叫 event_scheduler的全局变量控制的,这个变量默觉得OFF或者是0。

    查看是否开启:

    
mysql> SHOW
GLOBAL VARIABLES LIKE 'event%'
; //OFF 关闭;ON 开启;

    mysql> SELECT
@@event_scheduler;
 //0 关闭;1 开启。

    要使用事件调度器必须先开启event_scheduler。开启的方法例如以下:

    1、SET GLOBAL event_scheduler = ON

    2、SET GLOBAL event_scheduler = 1;

    3、SET @@global.event_scheduler = ON;

    4、SET @@global.event_scheduler = 1; 

    二、事件调度器event_scheduler的语法:

    事件调度器event_scheduler的语法主要包含创建。改动。删除。新建一个event后。假设还未删除,我们能够在mysql的information_schema下的EVENTS表中查到该event。

   1、创建event(CREATE
EVENT


   语法:CREATE
EVENT [IF NOT EXISTS] event_name 

         ON SCHEDULE schedule 

         [ON COMPLETION [NOT] PRESERVE] 

         [ENABLE | DISABLE] 

         [COMMENT 'comment'] 

         DO sql_statement

   说明:event_name :创建的event名字(唯一确定的)。

         ON
SCHEDULE:计划任务

         schedule: 决定event的运行时间和频率(注意时间一定要是将来的时间。过去的时间会出错)。有两种形式
AT和EVERY

                   语法:AT timestamp [+
INTERVAL interval]
| EVERY interval [STARTS timestamp]
[ENDStimestamp

                   interval
quantity {YEAR
| QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}(详细说明请參考手冊);

         [ON COMPLETION [NOT] PRESERVE]: 可选项。默认是ON
COMPLETION NOT PRESERVE 即计划任务运行完成后自己主动drop该事件;
ON COMPLETION  PRESERVE则不会drop掉 。

         [COMMENT 'comment']
:可选项,comment 用来描写叙述event;相当凝视,最大长度64个字节

         [ENABLE
| DISABLE] :设定event的状态,默认ENABLE:表示系统尝试运行这个事件,DISABLE:关闭该事情。能够用alter改动

         DO sql_statement:
须要运行的sql语句(能够是复合语句)。

                           注意使用复用语句的时候记得使用分隔符(例3);并且sql语句是由限制,这样的限制跟函数fuction和触发器  trigger中的sql语句限制是一样的。详细是指:LOCK
TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的。CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不能够再嵌入式的embedded mysql数据中使用。

样例:

    例1、CREATE EVENT myevent 

    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR 

    DO 

       UPDATE myschema.mytable SET mycol = mycol + 1;(从创建開始一小时后运行1次该语句)



    例2、CREATE EVENT e_hourly 

    ON SCHEDULE EVERY 1 HOUR 

    COMMENT 'Clears out sessions table each hour.' 

    DO 

       DELETE FROM site_activity.sessions; (每隔一小时删除session表)

    例3:DELIMITER | 

         CREATE EVENT e 

         ON SCHEDULE EVERY 5 SECOND 

         DO 

            BEGIN 

                 DECLARE v INTEGER; 

                 DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; 

                 SET v = 0; 

                 WHILE v < 5 DO INSERT INTO t1 VALUES (0); 

                 UPDATE t2 SET s1 = s1 + 1; SET v = v + 1; 

                 END WHILE; 

            END | 

         DELIMITER ; 

    2、改动event(ALTER
EVENT


    语法:ALTER
EVENT event_name 

          [ON SCHEDULE schedule

          [RENAME TO new_event_name

          [ON COMPLETION [NOT] PRESERVE] 

          [COMMENT 'comment']
[ENABLE | DISABLE] 

          [DO sql_statement

    说明:语句中的ON
SCHEDULE
ON COMPLETIONCOMMENTENABLE / DISABLE,
and DO 与CREATE EVENT中的全然一致

    注意:改动event只对已经存在的event起作用

    样例: 

    1、ALTER
EVENT 
no_such_event

       ON SCHEDULE 
 everu '2:3' DAY_HOUR (result:ERROR
1517 (HY000): Unknown event 'no_such_event' )

    2、先创建一个event:

       CREATE EVENT myevent 

       ON SCHEDULE EVERY 6 HOUR 

       COMMENT 'A sample comment.' 

       DO 

          UPDATE myschema.mytable SET mycol = mycol + 1; 

      改动1:

      ALTER EVENT myevent 

      ON SCHEDULE EVERY 12 HOUR 

      STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时运行一次,改动成4小时后每12小时运行一次)

      改动2:

      ALTER EVENT myevent DISABLE; (将默认的ENABLE改动为 DISABLE)

      2、改动event(ALTER
EVENT


     语法:

DROP EVENT [IF EXISTS] event_name



原文链接:http://blog.163.com/wumingli456@126/blog/static/28896414201082732227944/

MySQL事件调度器Event Scheduler的更多相关文章

  1. MySQL事件调度器event的使用

    Q:假设,有一个需求,希望在某一个时刻系统调用一个begin end执行一下:十分钟以后执行一下begin end.亦或有一个需求,每个多长时间周期性执行begin end.那么这个时候该怎么办呢? ...

  2. MySQL计划任务(事件调度器)(Event Scheduler)

    http://www.cnblogs.com/c840136/articles/2388512.html https://dev.mysql.com/doc/refman/5.7/en/events- ...

  3. MySQL计划任务(事件调度器)(Event Scheduler)[转]

    原文链接: http://www.cnblogs.com/c840136/articles/2388512.html MySQL5.1.x版本中引入了一项新特性EVENT,顾名思义就是事件.定时任务机 ...

  4. mysql事件调度器定时删除binlog

    MySQL5.1.6起Mysql增加了事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由Linux操作系统的计划任务来执行的工作MySQL的事件调度器可以精确 ...

  5. mysql事件调度器功能

    一.前言 自MySQL5.1.6起,增加了一个非常有特色的功能–事件调度器(Event Scheduler),可以用做定时执行某些特定任务(例如:删除记录.对数据进行汇总等等),来取代原先只能由操作系 ...

  6. mysql 事件调度器

    1.mysql事件调度器,也就是计划任务,计划做某事,有两种方式: 2.在某个时间点做某事,AT TIMESTAMP [+ INTERVAL INTERVAL] 某个时间点加上偏移. 3.定时地做某事 ...

  7. mysql事件调度器

    #查看mysql事件调度器是否开启 SHOW VARIABLES WHERE Variable_name = 'event_scheduler'; #开启mysql事件调度器功能 SET GLOBAL ...

  8. mysql事件调度器使用

    --设置事件调度器 开启SET GLOBAL event_scheduler = ON; --查看事件调度器 是否开启 on开  off关SHOW VARIABLES LIKE 'event_sche ...

  9. Mysql事件调度器学习

    在cassandra数据库中,有一个叫做TTL的功能,即插入一条记录时,可以指定某一字段对应的TTL值,比如30s,那么当TTL到达30s后该条记录就会被自动删除.目前MySQL并未直接提供TTL的功 ...

随机推荐

  1. iOS开发实践之网络检測Reachability

    在网络应用开发中.有时须要对用户设备的网络状态进行实时监控.以至于对用户进行友好提示 或者依据不同网络状态处理不一样的逻辑(如视频播放app,依据当前的网络情况自己主动切换视频清晰度等等).用Reac ...

  2. php面向对象之get和set方法

    php面向对象之get和set方法 简介 1.自己写get或者set 2.用系统的魔术方法__get和__set 代码 <?php class Person{ private $userName ...

  3. 分析性能瓶颈的视图:v$session_wait

    这是一个寻找性能瓶颈的关键视图.它提供了任何情况下session在数据库中当前正在等待什么(如果session当前什么也没在做,则显示它最后的等待事件).当系统存在性能问题时,本视图可以做为一个起点指 ...

  4. POJ 2446 匈牙利算法

    题意: 思路: 二分图匹配... // by SiriusRen #include <cmath> #include <cstdio> #include <cstring ...

  5. C++中的pair,make_pair学习

    std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型.例如std::pair<int,float> 或者 std::pair<double,do ...

  6. Neo4j沙盒实验申请过程步骤(图文详解)

    不多说,直接上干货! 参考博客 http://blog.csdn.net/u012318074/article/details/72793632    (对此表示感谢) 前期博客 我暂时是将Neo4j ...

  7. form&method【POST~GET】

    <form.../>中method属性指定了该表单是以哪种方式提交请求,有两种方式:GET请求方式和POST请求方式,默认是GET请求方式.两种方式的区别:get方式的请求是在浏览器地址栏 ...

  8. struts2学习之基础笔记5

    第十章 Struts 2的输入校验 1 Struts 2 输入校验原理 a . 分类 validate()方法校验 b . validation框架校验 2 valibate()方法校验实现 步骤  ...

  9. UNP学习笔记4——I/O复用:select和poll函数

    1 概述 之间的学习中发现,传统的阻塞式系统调用不仅浪费进程运行时间,而且会带来狠毒问题.因此进程需要有一种预先告知内核的能力,使得内核一旦发现进程指定的一个或者多个I/O条件就绪,它就通知进程.这个 ...

  10. Android回炉系列之四大组件之首Activity

            有段时间没有认认真真研习过android了,android毕竟是我进这个软件开发圈子接触的第一门技术,android已经成了口头禅之类的东西了.当初学习android的时候大都是草草了 ...