欢迎来到数据库事件系列的第三部分!第 1 部分概述了数据库事件和计划任务之间的区别,以及如何在 MySQL 中配置事件调度程序线程。这是一个必不可少的话题,上次只是粗略提到。

间隔(Interval)在事件的定义中起着重要作用。除非你只是创建一个立即执行的一次性事件,否则必须指定一个间隔,指定相对于当前日期和时间之后的某个时间点,例如“从现在开始的两周后”。此外,你必须为了重复发生的事件提供一个间隔来执行事件,例如“每 6 小时”。

让我们从事件的初始执行时间开始。它由“AT CURRENT_TIMESTAMP”子句组成,后跟可选的“+ INTERVAL interval” 子句。AT 子句的后半部分指定执行前等待的时间。例如,以下事件将在创建一周后执行:

间隔部分基于 DATE_ADD() 函数接受的间隔。它们由两部分组成:数量和时间单位。单位关键字也是相同的,只是微秒(microsecond)不适用于事件。

以下是所有有效间隔单位值和每个值的预期表达式参数:

使用上表作为指引,如果我们想表达分钟和秒钟,例如“两分钟十秒”,我们会写:

在上面的事件定义中,'2:10' 是预期的表达式参数,MINUTE_SECOND 是间隔单位。

组合两个不同间隔的间隔类型,例如分钟和秒钟,被称为复杂时间单位。

如果特定复杂时间单位没有间隔单位,例如周和天,则可以组合间隔。例如,AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 1 DAY 相当于“从现在开始的两周零一天”。

不是大多数事件都是根据特定的调度重复发生。你可以使用“EVERY interval”子句设置事件重复发生的时间间隔。以下是每两天执行一次的事件的定义: