23.4.1 事件计划程序概述

MySQL 事件是根据计划运行的任务。因此,有时我们将它们称为计划事件。创建事件时,将创建一个包含一个或多个 SQL 语句的命名数据库对象,该 SQL 语句将在一个特定的日期和时间开始和结束,并以一个或多个规则的间隔执行。从概念上讲,这类似于 Unix crontab(也称为“ cron 作业”)或 Windows Task Scheduler 的想法。

这种类型的计划任务有时也称为“时间触发器”,这意味着这些对象是随着时间的流逝而触发的。尽管这基本上是正确的,但我们更喜欢使用* events *来避免与第 23.3 节“使用触发器”中讨论的触发器类型混淆。更具体地说,事件不应与“临时触发器”混淆。触发器是一个数据库对象,其语句是响应于给定 table 上发生的特定类型的事件而执行的,而(sched 的)事件是一个语句,其响应于经过指定时间间隔而执行的对象。

尽管 SQL 标准中没有规定事件调度,但其他数据库系统中也有先例,您可能会注意到这些实现与 MySQL Server 中的实现之间存在一些相似之处。

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

  • 在 MySQL 中,事件是通过事件的名称和为其分配的架构唯一标识的。

  • 事件根据时间 table 执行特定操作。此操作包含一个 SQL 语句,如果需要,它可以是开始...结束块中的复合语句(请参见第 13.6 节“复合语句”)。事件的时间可以是一次性的,也可以是周期性的。一次性事件仅执行一次。重复事件以固定的时间间隔重复执行其操作,并且可以为重复事件的时间 table 指定特定的开始日期和时间,结束日期和时间,或者两者都指定,也可以不指定。 (默认情况下,重复事件的日程安排从创建之日起开始,并无限期地持续,直到被禁用或删除为止.)

如果重复事件未在其调度间隔内终止,则结果可能是事件的多个实例同时执行。如果这是不希望的,则应构建一种机制来防止同时发生实例。例如,您可以使用GET_LOCK()函数或行或 table 锁定。

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

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

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