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

MySQL 事件調度器 (Event Scheduler) 完整管理指南

     編輯:MySQL 綜合教學

MySQL Event Scheduler 類似 Linux cron,但運行在資料庫內核,適合定時清理、統計聚合、分區維護等資料庫內部任務。

啟用與狀態檢查


-- 查看狀態
SHOW VARIABLES LIKE 'event_scheduler';
-- 啟用 (運行時生效,重啟失效)
SET GLOBAL event_scheduler = ON;  -- 或 1
-- 永久生效:my.cnf [mysqld] 區段加 event_scheduler=ON

事件創建語法


CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;

-- schedule 範例
AT '2023-12-31 23:59:59'                    -- 一次性
EVERY 1 DAY                                  -- 週期
EVERY 30 MINUTE STARTS '2023-01-01 00:00:00' -- 週期+起始時間

實戰範例:每 30 分鐘清理狀態


CREATE EVENT updateInfoStatus
ON SCHEDULE EVERY 30 MINUTE
DO
  UPDATE `jd_article` SET `status` = 0
  WHERE `status` = 1 AND `date` <= NOW();

事件修改


ALTER EVENT updateInfoStatus
ON SCHEDULE EVERY 1 HOUR
DO
  UPDATE `jd_article` SET `status` = 0 WHERE `status` = 1 AND `date` <= NOW();

啟用/禁用/刪除/查看

操作SQL
臨時禁用ALTER EVENT updateInfoStatus DISABLE;
啟用ALTER EVENT updateInfoStatus ENABLE;
重命名ALTER EVENT old_name RENAME TO new_name;
刪除DROP EVENT [IF EXISTS] updateInfoStatus;
查看所有SHOW EVENTS;
查看詳情SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='updateInfoStatus';
查看建立語句SHOW CREATE EVENT updateInfoStatus;

注意事項

  • 事件體 DO 只能包含單條 SQL,複雜邏輯請封裝為存儲過程,事件中 CALL proc()。
  • 事件執行權限取決於 DEFINER(預設創建者),需確保其具備操作權限。
  • 時區影響排程時間,建議統一設為 UTC 或業務時區。
  • 高頻事件 (秒級) 可能產生鎖爭用,謹慎評估。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved