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'

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

在下一篇文章中,我們將學習如何設定事件的開始時間和結束時間。

Navicat 文章
頻道記錄
分享
部落格封存檔