事件排程程式或在 MySQL 中設定計時器
本教程將指導你建立一個 EVENT
,也稱為 MySQL 計時器。
我們將看到如何在 MySQL 中設定計時器以讓 MySQL 運算元據(例如,UPDATE
/INSERT
/DELETE
資料)。它還將在提到的日期和時間進行備份(如果需要)。
我們將考慮不同的場景來研究 MySQL EVENT
。此外,討論它的重要性和好處。對於本文,我們使用的是 MySQL 版本 8.0.27,但你可以從他們的官方網站獲得更新的版本(如果有)。
MySQL 事件
及其重要性
MySQL EVENT
是用於安排某些操作的任務 - 例如,更新列、獲取表或資料庫備份。
你可以建立``事件
將只執行一次或根據給定的時間間隔重複 - 例如,每分鐘、每小時、每月或每年。
沒有固定數量的語句來建立 EVENT
。EVENT
正文中可以有許多行。
如果 EVENT
有多於一行,則正文必須包含在 BEGIN
和 END
塊中。同樣重要的是要知道預定的 EVENT
命令儲存在資料庫
中並在預定的日期
和時間
執行。
建立事件對於以下好處很重要:
- 讓每個人都在同一頁面上
- 設定你的目標
- 管理日程並執行事件
- 用於優化表格、更新資料
- 為非高峰時間生成有用的報告
- 讓你優先處理你的任務
- 節省你的金錢和時間
在 MySQL 中 Event
排程程式或設定定時器
延誤對製作團隊和品牌來說都是非常昂貴的。
安排事件
或為特定欄位(列)設定計時器,然後將它們轉儲到專案報告的單獨檔案中將節省他們的時間。這樣,它會讓他們專注於其他生產性任務。
MySQL 使用一個名為 event_scheduler
的執行緒來執行所有事件。如果 event_scheduler
的值是 ON
,那麼 EVENT
才會被執行;否則,它不會。
你必須使用以下命令將 event_scheduler
的值設定為 ON
。
SET GLOBAL event_scheduler = ON;
現在,如果你建立
一個事件
,你怎麼知道它會被執行?使用以下命令檢視。
SHOW PROCESSLIST;
讓我們看看將 event_scheduler
的值設定為 ON
之前和之後的輸出。
在第一個輸出中,你不能執行 EVENT
,但在第二個輸出中,你可以。這是因為第二個螢幕截圖的 event_scheduler
為 ON
。
輸出:
你可以建立``事件
用於不同的目的 - 例如,事件
將只執行一次或每年執行一次,或者在給定的時間間隔內執行一次。讓我們在示例程式碼的幫助下開始理解。
我們在 person
資料庫中有一個 student
表,該表在當前時間有以下記錄。
讓我們建立
以下事件
來了解一次性事件。示例程式碼如下。
SET GLOBAL event_scheduler = ON;
CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
INSERT INTO person.student (id, FIRST_NAME, LAST_NAME, GENDER, EMAIL)
VALUES
(7, 'Thomas', 'Christoper', 'Male', 'tchristopher@gmail.com');
在上面給出的程式碼中,我們將 event_scheduler
的值設定為 ON
以執行 EVENT
。
然後我們建立了一個 EVENT
,將其命名為 ONE_TIME_EVENT
,並將其安排在 CURRENT_TIMESTAMP
。這個 EVENT
表示它將在 CURRENT_TIMESTAMP
上執行一次然後過期。
只有當它不存在時才會建立此 EVENT
。這個 EVENT
的工作是 INSERT
在 student
表中的一行。
建立並執行此 EVENT
後,檢查 student
表以檢視新記錄(見以下截圖)。
EVENT
提供任何名稱,但要提供唯一名稱。如果你有很多活動,活動的獨特名稱將使你的工作變得輕鬆。輸出:
假設你必須建立
一個將在 CURRENT_TIMESTAMP
的 20 秒後執行的事件
。這個事件也只會執行一次。寫下下面的程式碼就明白了。
CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT_WITH_INTERVAL
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 SECOND
DO
INSERT INTO person.student
VALUES
(8, 'Suzu', 'Aly', 'Fmale', 'aly.suzu@yahoo.com');
輸出:
你可以在 20 秒後在 student
表中看到新記錄。
請記住,如果你在 20 秒之前檢查它,你將不會在 student
表中看到這一新行。讓二十秒過去,然後檢查。
使用以下程式碼檢視建立和安排了多少事件。
SHOW EVENTS FROM classicmodels;
輸出:
為什麼上面的截圖中沒有列出任何 EVENT
?因為我們所有的活動現在都過期了,根據這篇文章。
你可以使用 ON COMPLETION PRESERVE
子句跟蹤所有事件,無論它們是否過期,如下所示。
CREATE EVENT TEST_PRESERVE_CLAUSE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO tests(test_name,test_date)
VALUES('Testing Preserve Clause',NOW());
如果你想建立
一個從 CURRENT_TIMESTAMP
開始,每分鐘
執行一次,並在一個小時
後到期的事件
怎麼辦。它被稱為重複事件。
你可以使用以下程式碼進行建立和練習。
CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
INSERT INTO Tests(test_name,test_date)
VALUES('This is recurring event test',NOW());
在上面給出的程式碼中,我們使用 STARTS
和 ENDS
告訴 EVENT
開始和結束時間。當你認為現在不需要該事件時,你也可以刪除該事件。
在以下程式碼中用你的 EVENT
名稱替換 name
。
DROP EVENT [IF EXIST] name;
讓我們以另一種情況為例,你建立了 EVENT
並將工作移交給另一個開發人員。沒有 COMMENT
容易理解嗎?當然不是。
CREATE
EVENT
並通過新增 COMMENT
來練習,如下所示。
CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
COMMENT 'It will add a new record every minture for one hour'
DO
INSERT INTO Tests(test_name,test_date)
VALUES('This is recurring event test',NOW());
我們已經在 EVENT
正文中僅使用一行來學習 EVENT
。如果你有多條線路怎麼辦?讓我們通過下面的示例程式碼來理解它。
delimiter |
CREATE EVENT IF NOT EXISTS EVENT_FOR_UPDATE_COLUMNS_AND_DUMP
ON SCHEDULE AT current_timestamp
DO BEGIN
UPDATE student SET GENDER = 'M' WHERE student.GENDER = 'Male';
UPDATE student SET GENDER = 'F' WHERE student.GENDER = 'Female';
Table student INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
END |
delimiter ;
你將在提供的程式碼中的 EVENT
正文中看到三個查詢。每當你在 EVENT
正文中包含多行時,請將它們包含在 BEGIN
和 END
中,如上所述。
在本例中,我們建立了一個從 CURRENT_TIMESTAMP
開始的 EVENT
。它將根據 UPDATE
語句更新 GENDER
列並將資料匯出到 .CSV
檔案中。
對於匯出,你必須使用此路徑 C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv
(如果你在 C 驅動器中安裝了 MySQL)。否則,你將收到以下錯誤。
Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
如果你已將 MySQL 安裝在其他位置,請使用 EVENT scheduler,然後使用以下命令查詢你的檔案將被匯出的路徑。
SHOW VARIABLES LIKE "secure_file_priv";
まとめ
我們在本教程中瞭解了 MySQL EVENT
排程程式。
我們學習瞭如何建立將按照提供的時間間隔執行一次的事件,根據給定的時間間隔僅執行一次。我們還探索了建立包含多行的事件、更新資料,然後將其匯出到單獨的檔案中。