首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 定時器 Event 調度器完整配置與實戰範例

     編輯:MySQL 資料庫相關知識

前置準備:啟用事件調度器

-- 查看狀態
SHOW VARIABLES LIKE '%sche%';
-- event_scheduler 值為 ON/1 表示啟用

-- 動態啟用(重啟失效)
SET GLOBAL event_scheduler = 1;

-- 永久生效:my.cnf [mysqld] 區塊添加
event_scheduler = ON

核心對象:存儲過程 + 事件

1. 創建被調用的存儲過程

DELIMITER $$
DROP PROCEDURE IF EXISTS e_test $$
CREATE PROCEDURE e_test()
BEGIN
    INSERT INTO t VALUES('1');
END $$
DELIMITER ;

2. 創建定時事件

-- 每秒執行一次
CREATE EVENT IF NOT EXISTS event_test
ON SCHEDULE EVERY 1 SECOND
ON COMPLETION PRESERVE
DO CALL e_test();

-- 啟用/禁用事件
ALTER EVENT event_test ON COMPLETION PRESERVE ENABLE;
ALTER EVENT event_test ON COMPLETION PRESERVE DISABLE;

常用排程模式範例

每 9 天執行一次(從現在開始)

CREATE EVENT EVENT1
ON SCHEDULE EVERY 9 DAY STARTS NOW()
ON COMPLETION PRESERVE ENABLE
DO CALL TOTAL();

每月 1 號凌晨 1 點執行

CREATE EVENT EVENT2
ON SCHEDULE EVERY 1 MONTH
STARTS DATE_ADD(
    DATE_ADD(DATE_SUB(CURDATE(), INTERVAL DAY(CURDATE())-1 DAY), INTERVAL 1 MONTH),
    INTERVAL 1 HOUR
)
ON COMPLETION PRESERVE ENABLE
DO CALL STAT();

每季度首日凌晨 2 點執行

CREATE EVENT TOTAL_SEASON_EVENT
ON SCHEDULE EVERY 1 QUARTER
STARTS DATE_ADD(
    DATE_ADD(DATE(CONCAT(YEAR(CURDATE()),'-',ELT(QUARTER(CURDATE()),1,4,7,10),'-',1)),
    INTERVAL 1 QUARTER),
    INTERVAL 2 HOUR
)
ON COMPLETION PRESERVE ENABLE
DO CALL SEASON_STAT();

每年 1 月 1 號凌晨 4 點執行

CREATE EVENT TOTAL_YEAR_EVENT
ON SCHEDULE EVERY 1 YEAR
STARTS DATE_ADD(DATE(CONCAT(YEAR(CURDATE())+1,'-',1,'-',1)), INTERVAL 4 HOUR)
ON COMPLETION PRESERVE ENABLE
DO CALL YEAR_STAT();

關鍵參數說明

子句含義
ON SCHEDULE定義執行時間規則
EVERY n UNIT間隔執行(SECOND/MINUTE/HOUR/DAY/WEEK/MONTH/QUARTER/YEAR)
STARTS timestamp首次執行時間
ENDS timestamp結束時間(可選)
ON COMPLETION PRESERVE執行完保留事件(默認 DROP)
ENABLE/DISABLE啟用/禁用事件

測試技巧

測試月/季/年排程時,可將系統時間調整為期間末尾(如 12-31 23:59:55)驗證觸發邏輯。

監控與管理

-- 查看所有事件
SHOW EVENTS;
-- 查看特定事件定義
SHOW CREATE EVENT event_test;
-- 刪除事件
DROP EVENT IF EXISTS event_test;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved