• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 事件计划程序概述

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

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

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

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

    • 在MySQL中,事件是通过事件的名称和为其分配的架构唯一标识的。
    • 事件根据时间表执行特定操作。该操作由一个SQL语句组成,BEGIN ... END如果需要,它可以是块中的复合语句(请参见“复合语句”)。事件的时间可以是一次性或反复发作。一次性事件仅执行一次。重复事件以固定的时间间隔重复其操作,并且可以为重复事件的时间表指定特定的开始日期和时间,结束日期和时间,或者两者都指定,也可以不指定。(默认情况下,重复事件的日程安排从创建之日起开始,并且会无限期地持续,直到被禁用或删除为止。)

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

    • 用户可以使用用于这些目的的SQL语句创建,修改和删除计划的事件。语法上无效的事件创建和修改语句失败,并显示相应的错误消息。用户可以在事件的动作中包含要求用户实际上没有特权的语句。事件创建或修改语句成功,但是事件的操作失败。有关详细信息,请参见“事件调度程序和MySQL特权”。
    • 可以使用SQL语句设置或修改事件的许多属性。这些属性包括事件的名称,时间,持久性(即,是否在其计划到期后保留),状态(启用或禁用),要执行的操作以及为其分配的架构。请参见“ ALTER EVENT语句”。

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

    • 事件的动作语句可能包含存储例程中允许的大多数SQL语句。有关限制,请参见“对存储程序的限制”。