Navicat 博客

2018 年 7 月 10 日,由 Robert Gravelle 撰写

欢迎来到数据库事件系列的第三部分!第 1 部分概述了数据库事件和计划任务之间的区别,以及如何在 MySQL 中配置事件调度程序线程。在第 2 部分中,我们探讨了如何使用 CREATE EVENT 语句创建 MySQL 事件。今天的文章将深入探讨如何调度 MySQL 8 事件。这是一个必不可少的话题,上次只是粗略提到。

设置执行间隔

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

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

CREATE EVENT my_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 WEEK

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

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

unit Value Expected expr Format
SECOND SECONDS
MINUTE MINUTES
HOUR HOURS
DAY DAYS
WEEK WEEKS
MONTH MONTHS
QUARTER QUARTERS
YEAR YEARS
MINUTE_SECOND 'MINUTES:SECONDS'
HOUR_SECOND 'HOURS:MINUTES:SECONDS'
HOUR_MINUTE 'HOURS:MINUTES'
DAY_SECOND 'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE 'DAYS HOURS:MINUTES'
DAY_HOUR 'DAYS HOURS'
YEAR_MONTH 'YEARS-MONTHS'

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

CREATE EVENT my_event
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL MINUTE_SECOND '2:10'

请注意

  • 单位总是表示为单数(没有“s”)。
  • 在上面的事件定义中,'2:10' 是预期的表达式参数,MINUTE_SECOND 是间隔单位。
  • 组合两个不同间隔的间隔类型,例如分钟和秒钟,被称为复杂时间单位。

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

调度重复的事件

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

CREATE EVENT my_event
ON SCHEDULE AT CURRENT_TIMESTAMP
EVERY 2 DAY

在下一篇文章中,我们将学习如何设置活动的开始时间和结束时间。

Navicat 文章
频道条目
分享
文章归档