欢迎来到数据库事件系列的第三部分!第 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
在下一篇文章中,我们将学习如何设置活动的开始时间和结束时间。