-- 1. 檢查/開啟調度器
SHOW VARIABLES LIKE 'event_scheduler';
SET GLOBAL event_scheduler = 1;
-- 2. 創建存儲過程(業務邏輯)
CREATE PROCEDURE update_exam()
BEGIN
UPDATE examinfo SET endtime = NOW() WHERE id = 14;
END;
-- 3. 創建事件
CREATE EVENT IF NOT EXISTS e_update_exam
ON SCHEDULE EVERY 30 SECOND
ON COMPLETION PRESERVE
DO CALL update_exam();
-- 暫停
ALTER EVENT e_update_exam DISABLE;
-- 恢復
ALTER EVENT e_update_exam ENABLE;
-- 修改頻率
ALTER EVENT e_update_exam ON SCHEDULE EVERY 1 MINUTE;
-- 刪除
DROP EVENT IF EXISTS e_update_exam;
事件定義存於 mysql.event 表,**隨庫備份遷移**。但調度器啟動狀態不持久化,需在 my.cnf 固化:
[mysqld]
event_scheduler = ON
或啟動參數:mysqld --event_scheduler=ON。
AT timestamp [+ INTERVAL ...]:單次EVERY interval [STARTS ...] [ENDS ...]:循環ON COMPLETION PRESERVE:保留事件定義ENABLE/DISABLE:啟停| 優點 | 缺點 |
|---|---|
| 純 SQL,無外部依賴 | 僅支援單條 SQL(複雜邏輯需 CALL 存儲過程) |
| 秒級精度 | 高併發長事務可能阻塞調度器線程 |
| 隨庫遷移 | 無分散式協調,集群環境需外部調度 |
| 資料庫層面事務一致性 | 監控告警需自建(查 information_schema.EVENTS) |
mysqldump --events 導出事件定義備份