首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL Event Scheduler 事件調度器建立定時任務完整指南

     編輯:MySQL 綜合教學

MySQL Event Scheduler 事件調度器建立定時任務完整指南

MySQL 事件調度器(Event Scheduler)相當於 Linux cron 或 Windows 工作排程器,但精度可達秒級,適合即時性資料處理。

1. 建立事件 (CREATE EVENT)

CREATE [DEFINER = {user | CURRENT_USER}]
EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO event_body;

關鍵子句說明

  • event_name:最長 64 字元,可加 schema 前綴 schema.event
  • schedule:
    • AT timestamp [+ INTERVAL interval]:單次執行
    • EVERY interval [STARTS timestamp] [ENDS timestamp]:週期執行
    • interval 單位:YEAR, QUARTER, MONTH, DAY, HOUR, MINUTE, WEEK, SECOND 等
  • event_body:單一 SQL 或 BEGIN ... END 區塊

2. 事件範例

每小時自增欄位值

CREATE EVENT myevent
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO UPDATE myschema.mytable SET mycol = mycol + 1;

隔天啟動,每小時執行

CREATE EVENT myevent
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 DAY
DO UPDATE myschema.mytable SET mycol = mycol + 1;

複合 SQL 區塊(每 5 秒)

DELIMITER //
CREATE EVENT e
ON SCHEDULE EVERY 5 SECOND
DO BEGIN
    DECLARE v INT DEFAULT 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
    WHILE v < 5 DO
        INSERT INTO t1 VALUES (0);
        UPDATE t2 SET s1 = s1 + 1;
        SET v = v + 1;
    END WHILE;
END //
DELIMITER ;

3. 查看與修改事件

-- 查看所有事件
SHOW EVENTS;

-- 查看特定事件詳細資訊
SHOW CREATE EVENT event_name;

-- 修改事件(重新排程、重命名、啟停)
ALTER EVENT event_name
    [ON SCHEDULE ...]
    [RENAME TO new_name]
    [ENABLE | DISABLE]
    [COMMENT '...']
    [DO ...];

啟用/停用事件

ALTER EVENT e_test ENABLE;   -- 啟用
ALTER EVENT e_test DISABLE;  -- 停用

4. 事件調度器狀態管理

-- 查看狀態(三種方式皆可)
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST;  -- 可見 event_scheduler 執行緒

-- 啟用調度器
SET GLOBAL event_scheduler = ON;
-- 或 SET GLOBAL event_scheduler = 1;

-- 停用調度器
SET GLOBAL event_scheduler = OFF;

5. 監控事件執行狀況

SELECT EVENT_NAME, LAST_EXECUTED, STATUS
FROM information_schema.EVENTS
WHERE EVENT_SCHEMA = 'your_db';

最佳實務

  • 避免長時間運行的事件阻塞調度器執行緒
  • 事件內使用 DECLARE CONTINUE HANDLER 捕捉異常防止中斷
  • 大量資料操作分批次處理,減少鎖持有時間
  • 重要事件設定 ON COMPLETION PRESERVE 保留定義供稽核
  • 主從複製環境注意 DISABLE ON SLAVE 避免雙重執行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved