zoukankan      html  css  js  c++  java
  • Mysql 作业(Scheduler)

    介绍

     作业也叫做事件调度,其实它也就是一个时间触发器;它可以定义某个时间点执行指定的数据库命令操作。

     语法

    CREATE
        [DEFINER = { user | CURRENT_USER }]    ######定义创建人,默认创建事件的用户就是事件的定义人,必须具备super权限才能指定其他用户。
        EVENT                                  ######创建事件
        [IF NOT EXISTS]                        ######删除并判断是否有存在重名的作业
        event_name                             ######作业名
        ON SCHEDULE schedule                   ######ON SCHEDULE是固定语法,schedule定义执行的时间
        [ON COMPLETION [NOT] PRESERVE]         
        [ENABLE | DISABLE | DISABLE ON SLAVE]  ######启用或者禁用或者在从库上禁用
        [COMMENT 'comment']                    ######备注
        DO                                     ######规定语法
    event_body; ######操作命令 schedule: AT
    timestamp [+ INTERVAL interval] ... ####定义执行的时间,命令在指定的时间执行一次,INTERVAL是在AT timestamp的基础上执行类似DATE_ADD()命令,在指定的时间基础上加上一个时间,其中interval参数有很多具体的时间单位具体参考下面 | EVERY interval ####EVERY是重复执行的命令和AT是冲突的 [STARTS timestamp [+ INTERVAL interval] ...] ####定义开始时间(可以忽略),这里也可以在规定的开始时间基础上加上一个时间 [ENDS timestamp [+ INTERVAL interval] ...] ####定义结束时间(可以忽略) interval: ###时间参数 quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

    注意:AT和EVERY是互斥的操作;AT:只在规定的时间执行一次,EVERY:重复执行。

    组合的时间格式只有“年月日时分秒”之间的组合方式,没有week的组合方式

    由于Mysql语法非常的灵活,所以它支持很多的时间格式,类似如下:

    1.在指定的时间基础上加上2分10秒
    AT '2016-06-01 22:00:00' + INTERVAL '2:10' MINUTE_SECOND
    等同于
    AT '2016-06-01 22:00:00' + INTERVAL 2 MINUTE + INTERVAL 10 SECOND
    2.在当前的时间基础上加上3星期2天 AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY
    3.指定开始和结束时间,从当前时间加30分钟开始至当前时间加4个星期结束每12个小时执行一次命令
    EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK 

     注意:EVERY不支持“+ INTERVAL”格式,例如“+ INTERVAL 2 MINUTE + INTERVAL 10 SECOND”只能用 “ ‘2:10’ MINUTE_SECOND”代替

    查看作业功能否启用

    show  global variables like '%event_scheduler%';
    select @@event_scheduler;

    如果没有启用需要修改my.cnf,加入

    event_scheduler=1

    创建作业 

     1.在指定的时间点执行命令

    CREATE EVENT testevent 
    ON SCHEDULE AT
    '2016-06-27 22:00:00'
    COMMENT 'AT TIME '2016-06-27 22:00:00' EXEC INSERT Tevent'
    DO INSERT INTO study.Tevent() VALUES(NOW());

    2.也支持delimiter定义结束符

    delimiter |
    
    CREATE EVENT e_daily
        ON SCHEDULE
          EVERY 1 DAY
        COMMENT 'Saves total number of sessions then clears the table each day'
        DO
          BEGIN
            INSERT INTO site_activity.totals (time, total);
              SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions;
            DELETE FROM site_activity.sessions;
          END |
    
    delimiter ;

    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 ;

    4.定义开始和结束时间

    CREATE EVENT testevent ON SCHEDULE 
    EVERY 12 HOUR 
    STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE 
    ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
    DO
    INSERT INTO study.Tevent() VALUES(NOW());

    查看数据库中创建的作业

    select * from information_schema.events;

    启用禁用作业

    1.启用
    ALTER EVENT schema.event_name ENABLE
    2.禁用
    ALTER EVENT schema.event_name DISABLE

    删除作业

    drop event schema.eventname

    官方文档:http://dev.mysql.com/doc/refman/5.6/en/create-event.html

    总结

    DO后面的支持通用的Mysql语法操作;所有可以可以执行单个命令、可以执行命令串、也可以类型函数和存储过程执行循环语句、还可以直接调用存储过程等。

    注意:每个作业都有它所属的数据库,作业是属于具体的某个数据库的。

    备注:

        作者:pursuer.chen

        博客:http://www.cnblogs.com/chenmh

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

    《欢迎交流讨论》

  • 相关阅读:
    MonoDevelop/MonoTouch SDK开发iOS程序体验! 不及格的程序员
    iPad 开发陷井1 不及格的程序员
    以苹果平台下开发语言 "ObjectiveC" 谈语言开发效率之争 C#与Java你们都不要争,我才是最慢的! 不及格的程序员
    C# 扩展方法 借签于 ObjectiveC 扩展类. 不及格的程序员
    iOS 编程陷井. 不及格的程序员
    Multimedia Programming Guide & Audio 不及格的程序员
    GoogleStyleGuide 一个不错的开源项目. 不及格的程序员
    撒哟那拉 volatile !!! 不及格的程序员
    iPhone 游戏 Infinity Blade1.0 通关 不及格的程序员
    终于在中国大陆的互联网络中用Facebook and tWitter 's iPhone 客户端登录了。 不及格的程序员
  • 原文地址:https://www.cnblogs.com/chenmh/p/5614561.html
Copyright © 2011-2022 走看看