MySQL入门到精通(十七)

                                                   事件

17.1 事件概述

在MySQL 5.1中新增了一个特色功能事件调度器(Event Scheduler),简称事件。它可以作为定时任务调度器,取代部分原来只能用操作系统的计划任务才能执行的工作。另外,更值得一提的是,MySQL的事件可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下是非常实用的。

事件(event)是MySQL在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。

事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。

17.1.1 查看事件是否开启

事件由一个特点的线程来管理。启动事件调度器后,拥有SUPER权限的账户执行SHOW PROCESSLIST命令就可以看到这个线程了。查看事件是否开启代码:

SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;

17.1.2 开启事件

通过设定全局变量event_scheduler的值即可动态的控制事件调度器是否启用。开启MySQL的事件调度器,可以通过下面两种方式实现。

1.通过设置全局参数修改

在MySQL的命令行窗口中,使用SET GLOBAL命令可以开启或关闭事件。将event_scheduler参数的值设置为ON,则开启事件;如果设置为OFF,则关闭事件。查看事件是否开启代码:

SET GLOBAL event_scheduler = ON;
SHOW VARIABLES LIKE 'event_scheduler';

注意:如果想要始终开启事件,那么在使用SET GLOBAL开启事件后,还需要在my.ini/my.cnf中添加event_scheduler = ON。因为如果没有添加,MySQL重启事件又会回到原来的状态。

2.更改配置文件

在MySQL的配置文件my.ini(Windows系统)/my.cnf(Linux系统)中,找到[mysqld],然后在下面添加以下代码开启事件。

event_scheduler = ON

在配置文件中添加代码并保存文件后,还需要重新启动MySQL服务器才能生效。通过该方法开启事件,重启MySQL服务器后,不恢复为系统默认的未开启状态。

17.2 创建事件

在MySQL 5.1以上版本中,可以通过CREATE EVENT语句来创建事件,语法格式:

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;

从上面的语法中,可以看出CREATE EVENT语句由多个子句组成,各子句的详细说明如下:

子句说明
DEFINER可选,用于定义事件执行的时候检查权限的用户
IF NOT EXISTS可选,用于判断要创建的事件是否存在
EVENT event_name

必选,用于指定事件名,event_name的最大长度为64个字符,如果未指定event_name,

则默认为当前的MySQL用户名(不区分大小写)

ON SCHEDULE schedule必选,用于定义执行的时间和时间间隔
ON COMPLETION [NOT] PRESERVE可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即NOT PRESERVE
ENABLE | DISABLE | DISABLE ON SLAVE可选,用于指定事件的一种属性。定义事件创建以后是开启还是关闭,以及在从上关闭。如果是从服务器自动同步主上的创建事件的语句的话,会自动加上DISABLE ON SLAVE
COMMENT 'comment'可选,用于定义事件的注释
DO event_body必选,用于指定事件启动时所需要执行的代码

在ON SCHEDULE子句中,参数schedule的值为一个AS子句,用于指定事件在某个时刻发生,语法格式如下:

AT timestamp [+ INTERVAL interval] ...
         | EVERY interval
        [STARTS timestamp [+ INTERVAL interval] ...]
        [ENDS timestamp [+ INTERVAL interval] ...]

参数说明:

  • timestamp:表示一个具体的事件点,后面加上一个时间间隔,表示在这个时间间隔后事件发生。
  • EVENT子句:用于表示事件在指定时间区间每隔多长时间发生一次,其中STARTS子句用于指定款式时间;ENDS子句用于指定结束时间。
  • 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}

17.3 修改事件

在MySQL5.1及以后版本中,事件被创建之后,还可以使用ALTER EVENT语句修改其定义和相关属性,语法格式如下:

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]

ALTER EVENT语句的使用语法与CREATE EVENT语句基本相同。ALTER EVENT语句还有一个用法就是让一个事件关闭或再次让其活动。一个事件最后一次被调用后,它是无法被修改的,因为此时它已经存在了。

请注意,ALTER EVENT语句仅适用于存在的事件。如果您尝试修改不存在的事件,MySQL将会发出一条错误消息,因此在更改事件之前,应先使用SHOW EVENT语句检查事件的存在。

17.4 删除事件

在MySQL5.1及以后版本中,删除已经创建的事件可以使用DROP EVENT语句来实现,语法格式如下:

DROP EVENT [IF EXISTS] event_name​​​​​​​

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值