MySQL 8.4 Reference Manual  /  ...  /  Event Scheduler Overview

27.4.1 事件调度器概述

MySQL 事件是按照时间表运行的任务。因此,我们有时将其称为定时事件。当您创建一个事件时,您实际上是在创建一个名为的数据库对象,包含一条或多条SQL语句,用于在特定的日期和时间执行。概念上,这类似于Unix中的crontab(也称为cron作业)或Windows任务调度器。

这种类型的计划任务也被称为时间触发器,暗示这些对象是由时间的流逝引起的。虽然这基本上正确,我们更喜欢使用事件术语,以避免与第27.3节,“使用触发器”中讨论的触发器混淆。事件应该更明确地不被混淆为临时触发器。与之不同的是,触发器是一个数据库对象,它的语句在特定的表上发生某种类型的事件后执行,而一个(定时)事件是一个对象,它的语句是在指定时间间隔内执行。

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

MySQL 事件具有以下主要特征和属性:

  • 在 MySQL 中,一个事件通过其名称和分配给它的 schema 来唯一标识。

  • 事件根据调度执行特定的操作。该操作由一个 SQL 语句组成,可以是一个在BEGIN ... END块中,如果需要(见第15.6节,“复合语句语法”). 事件的触发方式可以是一次性重复性。一次性事件只执行一次。重复性事件在固定的时间间隔内重复执行,重复事件的调度可以指定开始日期和时间、结束日期和时间,或者都没有(默认情况下,重复事件的调度从创建时开始,直到被禁用或删除)。

    如果重复事件在其调度间隔内不能终止,可能会出现多个事件同时执行的情况。如果这不可取,应该制定机制防止同时执行。例如,可以使用GET_LOCK()函数或行锁或表锁。

  • 用户可以使用 SQL 语句来创建、修改和删除调度事件。语法无效的事件创建和修改语句将以适当的错误信息失败。用户可能在事件操作中包含需要的权限,但实际上不具备。事件创建或修改语句成功,但是事件操作失败。见第27.4.6节,“事件调度器和 MySQL 权限”了解详细信息。

  • 事件的许多属性可以使用SQL语句来设置或修改。这些属性包括事件的名称、定时、持久性(即是否在其调度过期后保留)、状态(启用或禁用)和分配给它的架构。见第15.1.3节,“ALTER EVENT 语句”

    事件的默认定义者是创建该事件的用户,除非该事件已经被修改,那么定义者就是最后一次ALTER EVENT语句影响该事件的用户。任何拥有数据库中EVENT特权的用户都可以修改事件。见第27.4.6节,“事件调度器和 MySQL 特权”

  • 事件的操作语句可能包括大多数在存储程序中允许的SQL语句。见第27.8节,“存储程序限制”