MySQL 5.1.6+ 引入事件調度器,可替代 OS 排程實現秒級精度的定時任務(清理、統計、監控)。本文完整覆蓋啟用方式、CREATE EVENT 語法詳解、8 類排程範例、ALTER/DROP/SHOW 維護指令、INFORMATION_SCHEMA.EVENTS 查詢與多事件衝突避坑。
-- 臨時生效
SET GLOBAL event_scheduler = ON; -- 或 1
-- 永久生效(my.cnf)
[mysqld]
event_scheduler = 1
-- 啟動參數
mysqld --event_scheduler=1
-- 驗證
SHOW VARIABLES LIKE 'event_scheduler';
SELECT @@event_scheduler;
SHOW PROCESSLIST; -- 可見 event_scheduler 線程
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO sql_statement;
schedule:
AT timestamp [+ INTERVAL interval] -- 單次
| EVERY interval [STARTS timestamp] [ENDS timestamp] -- 循環
interval:
quantity {YEAR|QUARTER|MONTH|DAY|HOUR|MINUTE|SECOND|...}
| 需求 | SQL 範例 |
|---|---|
| 每秒插入一筆 | CREATE EVENT e_ins ON SCHEDULE EVERY 1 SECOND DO INSERT INTO t(ts) VALUES (NOW()); |
| 5 秒後清空表(單次) | CREATE EVENT e_trunc ON SCHEDULE AT NOW() + INTERVAL 5 SECOND DO TRUNCATE TABLE t; |
| 指定時間點執行 | CREATE EVENT e_fix ON SCHEDULE AT '2025-12-31 23:59:59' DO TRUNCATE TABLE t; |
| 每天固定時間 | CREATE EVENT e_daily ON SCHEDULE EVERY 1 DAY STARTS '2025-01-01 02:00:00' DO TRUNCATE TABLE t; |
| 5 天後開始每天執行 | CREATE EVENT e_delay ON SCHEDULE EVERY 1 DAY STARTS NOW() + INTERVAL 5 DAY DO TRUNCATE TABLE t; |
| 每天執行,5 天後停止 | CREATE EVENT e_end ON SCHEDULE EVERY 1 DAY ENDS NOW() + INTERVAL 5 DAY DO TRUNCATE TABLE t; |
| 5 天後啟動,1 月後停止 | CREATE EVENT e_win ON SCHEDULE EVERY 1 DAY STARTS NOW() + INTERVAL 5 DAY ENDS NOW() + INTERVAL 1 MONTH DO TRUNCATE TABLE t; |
| 單次執行後自動銷毀 | CREATE EVENT e_once ON SCHEDULE EVERY 1 DAY ON COMPLETION NOT PRESERVE DO TRUNCATE TABLE t; |
-- 修改排程
ALTER EVENT e_daily ON SCHEDULE EVERY 5 DAY;
-- 禁用/啟用
ALTER EVENT e_daily DISABLE;
ALTER EVENT e_daily ENABLE;
-- 重命名 + 註釋
ALTER EVENT e_daily RENAME TO e_daily_v2 COMMENT 'v2';
-- 刪除
DROP EVENT IF EXISTS e_daily;
-- 查看所有事件
SHOW EVENTS;
SHOW EVENTS FROM db_name;
-- 查看建立語句
SHOW CREATE EVENT e_daily\G
-- 詳細資訊
SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME='e_ins' AND EVENT_SCHEMA='test'\G
DO CALL proc_name(); 可封裝複雜邏輯。system_time_zone、time_zone 與業務預期一致。EVENT 權限,SUPER 可查看所有事件。事件調度器提供秒級精度、資料庫內建、無外部依賴的定時能力,極適合股票、賠率、即時統計等高實時性場景。善用 ON COMPLETION PRESERVE 控制生命週期,配合監控告警,可構建穩健的資料庫級排程體系。