文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  事件调度程序概述

27.5.1 事件调度程序概述

MySQL 事件是按计划运行的任务。因此,我们有时将其称为计划事件。创建事件时,您将创建一个命名的数据库对象,其中包含一个或多个 SQL 语句,这些语句将从特定日期和时间开始,以一个或多个固定间隔执行。从概念上讲,这类似于 Unix crontab(也称为 cron 任务)或 Windows 任务计划程序。

此类计划任务有时也称为 时间触发器,这意味着这些对象是由时间的推移触发的。虽然这在本质上是正确的,但我们更喜欢使用术语 事件 来避免与第 27.4 节“使用触发器” 中讨论的触发器混淆。事件更具体地说是指不应与 临时触发器 混淆。触发器是一个数据库对象,其语句在对给定表上发生的特定类型的事件做出响应时执行,而(计划)事件是一个对象,其语句在经过指定的时间间隔后执行。

虽然 SQL 标准中没有关于事件调度的规定,但在其他数据库系统中已有先例,您可能会注意到这些实现与 MySQL 服务器中的实现之间存在一些相似之处。

MySQL 事件具有以下主要功能和属性

  • 在 MySQL 中,事件由其名称和分配给它的模式唯一标识。

  • 事件根据计划执行特定操作。此操作包含一个 SQL 语句,如果需要,它可以是 BEGIN ... END 块中的复合语句(请参阅第 15.6 节“复合语句语法”)。事件的时间可以是 一次性循环。一次性事件仅执行一次。循环事件以固定的时间间隔重复其操作,并且可以为循环事件的计划分配特定的开始日期和时间、结束日期和时间,或者两者都分配,或者两者都不分配。(默认情况下,循环事件的计划在其创建后立即开始,并无限期地继续,直到它被禁用或删除。)

    如果重复事件在其计划间隔内未终止,则可能会导致事件的多个实例同时执行。如果这是不可取的,则应建立一种机制来防止同时出现多个实例。例如,您可以使用 GET_LOCK() 函数,或行或表锁定。

  • 用户可以使用用于这些目的的 SQL 语句来创建、修改和删除计划事件。语法无效的事件创建和修改语句将失败并显示相应的错误消息。用户可以在事件的操作中包含需要用户实际上没有的权限的语句。事件创建或修改语句成功,但事件的操作失败。有关详细信息,请参阅第 27.5.6 节“事件调度程序和 MySQL 权限”

  • 可以使用 SQL 语句设置或修改事件的许多属性。这些属性包括事件的名称、时间、持久性(即,它是否在其计划到期后保留)、状态(启用或禁用)、要执行的操作以及分配给它的模式。请参阅第 15.1.3 节“ALTER EVENT 语句”

    事件的默认定义者是创建事件的用户,除非事件已被更改,在这种情况下,定义者是发出最后一个影响该事件的 ALTER EVENT 语句的用户。任何对定义事件的数据库具有 EVENT 权限的用户都可以修改事件。请参阅第 27.5.6 节“事件调度程序和 MySQL 权限”

  • 事件的操作语句可以包含存储例程中允许的大多数 SQL 语句。有关限制,请参阅第 27.9 节“存储程序的限制”