zoukankan      html  css  js  c++  java
  • mysql中的事件计划(event scheduler)

    事件计划是mysql中的对象,其中的sql语句会由经过特定时间段来触发。按照官方文档上的说明,这个概念与'时间触发器(temperal trigger)'是有区别的。从根本上来说evnet scheduler是对特定时间段的响应,而trigger是对特定表上发生的特定事件的响应。
    事件计划在sql标准中并没有定义,但是在其他数据库中可以看到类似的概念。mysql中的事件有一下一些主要的特征:
    1. mysql中的事件由名称和其所处的数据库唯一确定
    2. mysql中的事件是按照时间表运行的动作。动作的定义如果有需要可以使用复合语句begin...end。事件的时间可以是一次性的,也可以是周期性的。周期性的事件可以定义开始日期时间,结束日期时间。默认的程序从创建完成开始周期性运行,不会自动结束,直到该程序被禁用或者删除。如果在一个周期内程序没有正常运行结束,会在同一时间有几个程序实例运行。
    3. 用户能用sql语句创建,修改和删除事件,事件中若有语法问题,mysql会报错。
    4. 事件的性质可以用sql语句来设置和修改,这些性质包括:事件名,时间, 过期后是否保留, 状态, 执行的动作, 所在数据库。(alter event)
    5. 事件动作可以包含存储过程,函数,触发器中的大部分语句。

    1 创建

        CREATE
            [DEFINER = { user | CURRENT_USER }]
            EVENT
            [IF NOT EXISTS]
            event_name
            ON SCHEDULE schedule
            [ON COMPLETION [NOT] PRESERVE]
            [ENABLE | DISABLE | DISABLE ON SLAVE]
            [COMMENT 'comment']
            DO event_body;
    
        schedule:
            AT timestamp [+ INTERVAL interval] ...
          | EVERY interval
            [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}
    

    示例:

        ## 创建一次性计划
        REATE EVENT myevent
        ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
        DO
          UPDATE myschema.mytable SET mycol = mycol + 1;
    
        ## 周期性计划
        CREATE EVENT e_hourly
        ON SCHEDULE
          EVERY 1 HOUR
        COMMENT 'Clears out sessions table each hour.'
        DO
          DELETE FROM site_activity.sessions;
    

    2 修改

        ALTER
            [DEFINER = { user | CURRENT_USER }]
            EVENT event_name
            [ON SCHEDULE schedule]
            [ON COMPLETION [NOT] PRESERVE]
            [RENAME TO new_event_name]
            [ENABLE | DISABLE | DISABLE ON SLAVE]
            [COMMENT 'comment']
            [DO event_body]
    

    3 删除

        DROP EVENT [IF EXISTS] event_name
    
  • 相关阅读:
    应用服务器安装
    datasnap的线程池
    压缩OLEVARIANT数据
    服务端日志记录
    提交主从表的多个已经修改的数据
    MySQL与PostgreSQL相比哪个更好?
    Vue入门常用指令详解
    Laravel模型事件的实现原理详解
    Git 遇到了 early EOF indexpack failed 问题
    Laravel 代码开发最佳实践
  • 原文地址:https://www.cnblogs.com/noway-neway/p/5220007.html
Copyright © 2011-2022 走看看