MySQL 事件是根据计划运行的任务。因此,我们有时将它们称为 计划 事件。当您创建一个事件时,您正在创建一个包含一个或多个 SQL 语句的命名数据库对象,以便在一个或多个规则间隔中执行,开始和结束于特定的日期和时间。概念上,这类似于 Unix crontab
(也称为 “cron 作业”)或 Windows 任务计划程序。
这种类型的计划任务有时也称为 “时间触发器”,暗示这些对象是由时间的流逝所触发的。虽然这基本上是正确的,但我们更喜欢使用术语 事件,以避免与 第 27.3 节,“使用触发器” 中讨论的触发器类型混淆。事件不应该与 “临时触发器” 混淆。触发器是一个数据库对象,其语句是在特定表上发生特定事件时执行的,而计划事件是一个对象,其语句是在指定时间间隔后执行的。
虽然 SQL 标准中没有事件调度的规定,但是在其他数据库系统中有先例,您可能会注意到这些实现与 MySQL 服务器中的相似之处。
MySQL 事件具有以下主要特征和属性:
-
在 MySQL 中,事件由其名称和分配的模式唯一标识。
-
事件根据计划执行特定操作。该操作由 SQL 语句组成,可以是复合语句块(见
BEGIN ... END
),如果需要。事件的时间可以是 一次性 或 循环 的。一次性事件仅执行一次。循环事件在规则间隔中重复其操作,事件的计划可以指定特定的开始日期和时间、结束日期和时间、两者或都不指定。(默认情况下,循环事件的计划从创建时开始,直到禁用或删除。)如果循环事件在其计划间隔内未终止,可能会导致多个事件实例同时执行。如果这不可取,您应该制定机制来防止同时实例。例如,您可以使用
GET_LOCK()
函数或行锁定或表锁定。 -
用户可以使用 SQL 语句创建、修改和删除计划事件。语法无效的事件创建和修改语句将失败,并显示适当的错误消息。用户可以在事件的操作中包含需要特权的语句,而用户实际上不具备这些特权。事件创建或修改语句成功,但事件的操作失败。请参阅 第 27.4.6 节,“事件调度器和 MySQL 权限”。
-
事件的许多属性可以使用 SQL 语句设置或修改。这些属性包括事件的名称、时间、持久性(即是否在计划结束后保留)、状态(启用或禁用)、要执行的操作和分配的模式。请参阅 第 15.1.3 节,“ALTER EVENT 语句”。
事件的默认定义者是创建事件的用户,除非事件已被修改,在这种情况下,定义者是最后一个
ALTER EVENT
语句的用户,影响该事件。任何拥有数据库EVENT
权限的用户都可以修改事件。请参阅 第 27.4.6 节,“事件调度器和 MySQL 权限”。 -
事件的操作语句可以包含大多数存储过程中允许的 SQL 语句。有关限制,请参阅 第 27.8 节,“存储程序限制”。