我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么理解MySQL的EVENT事件

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么理解MySQL的EVENT事件

这篇文章主要介绍“怎么理解MySQL的EVENT事件”,在日常操作中,相信很多人在怎么理解MySQL的EVENT事件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解MySQL的EVENT事件”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

MySQL EVENT(事件)

MySQL 事件是按调度表运行的任务。这些事件可称为“调度事件”。创建事件时,会将其创建为命名数据库对象,其中包含在特定时间执行或定期重复发生的SQL 语句(或存储过程)。这在概念上与Linux/UNIX crontab(也称为“cron 作业”)或Windows 任务调度程序的理念类似。语法与相关语句如下:

CREATE EVENT event_name ON SCHEDULE schedule DO sql_statement

事件语句:

– SET GLOBAL event_scheduler = {ON | OFF}

– CREATE EVENT

– ALTER EVENT

– DROP EVENT

event_name:事件是模式对象,与表、存储过程和触发器一样。event_name 必须是有效的标识符,且可以按正常方式通过模式名称进行引用和/或限定。事件名称在模式中必须是唯一的。

schedule:调度表是一种规则,用于指定MySQL 执行与事件相关联的操作的时间。

sql_statement:您必须包含按调度表执行的有效SQL 语句或存储过程语句。此语句受到的限制与适用于存储函数和动态SQL 的限制相同。例如,该语句无法返回结果集(如SELECT 或SHOW 所生成的结果集)。通常会使用CALL 语句调用过程来执行实际操作。

1.1.       调度表

调度表是指定应在何时执行操作的规则。可以在CREATE EVENT 和ALTER EVENT 语句的SCHEDULE 子句中指定调度表。

有两种类型的调度表:执行一次的调度表(使用AT 关键字)和可重复执行的调度表(使用EVERY 关键字)。对于后者,必须定义事件的重复频率。还可以定义一个时间段,以确定应重复执行事件的期限。

SCHEDULE 子句的语法如下所示:

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

SCHEDULE 子句可包含以下变量元素:

Ø  timestamp:DATETIME 或TIMESTAMP 类型的表达式;

Ø  interval:用于指定持续时间。持续时间的表示方法为,指定一个整数数量,后跟用于定义特定种类持续时间的关键字。有效的关键字包括:

- YEAR

- QUARTER

- MONTH

- DAY

- HOUR

- MINUTE

- WEEK

- SECOND

- YEAR_MONTH

- DAY_HOUR

- DAY_MINUTE

- DAY_SECOND

- HOUR_MINUTE

- HOUR_SECOND

- MINUTE_SECOND

事件调度程序是mysqld 进程中的一个单独线程,负责执行调度事件。调度程序会检查是否应执行事件;如果应执行事件,则会创建新的连接来执行操作。

使用事件来自动地定期执行(维护)任务,如更新汇总表或刷新查询中的表(物化视图仿真),或者执行夜间作业。例如,处理白天的工作、加载数据仓库或者将数据导出到文件中。

1.2.       事件调度程序和权限

1)       事件调度程序

创建事件后,该事件将存储在数据库中,以便按调度表执行。event_scheduler 线程会监控所有事件的调度表,在到达调度表中的时间时,该线程会启动一个新的线程来执行每个事件。

默认情况下,event_scheduler 线程设置为OFF。您必须显式启用该线程,方法为修改全局event_scheduler 服务器变量的值,将其设置为ON。还可以通过将服务器变量添加到选项文件中(以便更改在启动时生效)或动态使用SET 语法来实现。如果在event_scheduler 设置为DISABLED 的情况下启动服务器,则无法在MySQL 正在运行时通过SET 语句将其启用。而必须停止MySQL 并在启用该选项的情况下重新启动MySQL。

启用event_scheduler 线程后,您可以在SHOW PROCESSLIST 的输出(以及INFORMATION_SCHEMA 等效项PROCESSLIST)中看到该线程。

可以使用ALTER EVENT 语法更改EVENT。可以通过该语法更改EVENT 的每个元素。因此,ALTER EVENT 的语法模型几乎与CREATE EVENT 语句的语法模型完全相同。

2)       事件调度权限

必须拥有SUPER 权限才能设置全局event_scheduler 变量。必须拥有EVENT 权限才能创建、修改或删除事件。

Ø  使用GRANT 分配权限(仅限在模式级别)

mysql> GRANT EVENT ON myschema.* TO user1@srv1;

mysql> GRANT EVENT ON *.* TO user1@srv1;

Ø  使用REVOKE 取消事件权限

REVOKE EVENT ON myschema.* FROM user1@srv1;

要取消EVENT 权限,请使用REVOKE 语句。撤消用户帐户的EVENT 权限不会删除或禁用该帐户已创建的任何事件。

用户的EVENT 权限存储在mysql.user 和mysql.db 表的Event_priv 列中。在这两种情况下,该列均存储值“Y”或“N”之一。“N”是默认值。仅当给定用户拥有全局EVENT 权限时,该用户的mysql.user.Event_priv 值才会设为“Y”。对于模式级别的EVENT 权限,GRANT 会在mysql.db 中创建一个行,并按如下所示设置该行的列值:

l  Db:模式的名称

l  User:用户的名称

l  Event_priv:“Y”

您不必直接操作这些表,因为GRANT EVENT 和REVOKE EVENT 语句会对其执行所需的操作。

1.3.       事件执行权限

事件使用事件定义者的权限进行执行。如果定义者无权执行某任务,则事件无法执行该任务。示例如下:

user1@srv1 只能为myschema 创建SELECT 事件:

CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND

DO

INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());

由于缺少INSERT 权限,该事件不会在表中创建任何行。事件使用其定义者的权限进行执行,并且无法执行定义者无权执行的任何操作,了解这一点非常重要。例如,假设user1@srv1 拥有对myschema 的EVENT 权限。再假设该用户拥有对myschema 的SELECT 权限,但是没有针对此模式的其他权限。尽管user1@srv1 可以创建新事件,但该事件本身无法执行INSERT 操作,因为定义者user1@srv1 无权执行该操作。

错误日志

如果查看MySQL 错误日志(hostname.err) 可以看到事件正在执行,但是该事件尝试执行的操作失败(由RetCode=0 指明):

...

060209 22:39:44 [Note] EVEX EXECUTING event newdb.e [EXPR:10]

060209 22:39:44 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0

060209 22:39:54 [Note] EVEX EXECUTING event newdb.e [EXPR:10]

060209 22:39:54 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0

060209 22:40:04 [Note] EVEX EXECUTING event newdb.e [EXPR:10]

060209 22:40:04 [Note] EVEX EXECUTED event newdb.e [EXPR:10]. RetCode=0

...

1.4.       检查事件

SHOW CREATE EVENT event_name此语句显示重新创建给定事件所需的CREATE EVENT 语句。必须提供事件名称才能查看该事件的相关信息。

SHOW EVENTS此语句为MySQL 扩展。它可返回事件的特征,如数据库、名称、类型、创建者以及创建和修改日期。此语句有一个优点:可基于LIKE 模式或WHERE 子句中提供的条件来显示特定事件。如果未提供此类条件,则SHOW EVENTS 语句会显示所有事件的相关信息。

INFORMATION_SCHEMA.EVENTS

EVENT_CATALOG: NULL

EVENT_SCHEMA: myschema

EVENT_NAME: e_store_ts

DEFINER: user1@srv1

EVENT_BODY: SQL

EVENT_DEFINITION: INSERT INTO myschema.mytable VALUES

(UNIX_TIMESTAMP())

...

1.5.       删除事件

使用如下语法可显式删除事件:

DROP EVENT [IF EXISTS] [schema_name.]event_name;

使用IF EXISTS 可防止因尝试删除不存在的事件而出现的错误。您必须对包含要删除的事件的数据库拥有EVENT 权限。

到此,关于“怎么理解MySQL的EVENT事件”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么理解MySQL的EVENT事件

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

带你了解MySQL中的事件调度器EVENT

MySQL中的事件调度器,EVENT,也叫定时任务,类似于Unix crontab或Windows任务调度程序。 EVENT由其名称和所在的schema唯一标识。 EVENT根据计划执行特定操作。操作由SQL语句组成,语句可以是BEGIN…
2022-05-30

Node.JS中事件轮询(Event Loop)的解析

当我们知道I/O操作和创建新线程的开销是巨大的!网站延迟的开销对于一个网站,后台大多不需要进行复杂的计算,我们的程序大多时间花费在I/O读取上。 看到一个数据:IO操作可以比数据处理慢几个数量级。高端SSD固态硬盘的读取速度可以达到200m
2022-06-04

MySQL定时任务EVENT事件的使用方法

目录一、查看定时策略是否开启二、创建定时任务 三、定时任务操作四、定时规则一、查看定时策略是否开启show variables like '%event_scheduler%'; * on这里是启用的查看进程:会看到一个用户为event
2023-05-25

js 事件处理函数间的Event物件是否全等

在非IE,事件对象Propagation之间的处理函数,或同dom节点触发的多个函数之间的Event物件是全等的。与绑定形式[addEventListener/DOM0]无关。
2022-11-21

怎么理解MySQL事务

这篇“怎么理解MySQL事务”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么理解MySQL事务”文章吧。事务指逻辑上的一组
2023-06-26

MySQL怎么查看所有的event

要查看所有的event,可以使用以下MySQL语句:SHOW EVENTS;这条语句将显示所有当前存在的event列表。如果你想查看特定的event的详细信息,可以使用以下语句:SHOW CREATE EVENT event_name;
MySQL怎么查看所有的event
2024-03-11

怎么理解js事件委托

这篇文章主要讲解了“怎么理解js事件委托”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么理解js事件委托”吧!1、每个函数都是对象,占用内存。内存中的对象越多,性能越差。解决事件处理过多问
2023-06-25

怎么理解Java事件响应

这篇文章主要介绍“怎么理解Java事件响应”,在日常操作中,相信很多人在怎么理解Java事件响应问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解Java事件响应”的疑惑有所帮助!接下来,请跟着小编一起来
2023-06-02

编程热搜

目录