歡迎來到資料庫事件系列的第三部分!第 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'
Note that:
- 單位總是表示為單數(沒有「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
在下一篇文章中,我們將學習如何設定事件的開始時間和結束時間。