加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

在navicat上设置定时计划执行存储过程(二)NavicatforMySQL设置定时任务(事件)

(2018-05-26 22:50:30)
标签:

mysql

navicat

分类: 互联网知识
1.查询界面输入命令,查看定时任务是否开启,未开始时OFF: show variables like '%event_scheduler%';
2.查询界面输入命令,开启定时任务: set global event_scheduler =1;(再使用show variables like '%sche%'; 可查看到为on)
在navicat上设置定时计划执行存储过程(二)NavicatforMySQL设置定时任务(事件)


MySQL事件调度器Event Scheduler

     我们都知道windows的计划任务和linux的crontab都是用来实现一些周期性的任务和固定时间需要执行的任务。在mysql5.1之前我们完成数据库的周期性操作都必须借助这些操作系统实现。在mysql5.1及其之后的版本增加了计划任务的功能(mysql事件调度器Event Scheduler)。
    事件调度器是定时触发执行的,在这个角度上也可以称作是"临时的触发器"。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间 隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的"事件调度器"。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。
    一、事件调度器event_scheduler的开启:
    mysql服务器时间调度器的开启是由一个名叫 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] [ENDS timestamp] 
                   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 COMPLETION, COMMENT, ENABLE / 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

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有