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

MySQL 定時任務與存儲過程實戰範例:Event Scheduler 完整配置

     編輯:MySQL 綜合教學

核心功能演示

本範例展示如何建立資料表、存儲過程、啟用事件調度器,並創建每 10 秒自動執行一次的定時任務。

完整 SQL 腳本

-- 1. 檢查/啟用事件調度器
SHOW VARIABLES LIKE '%event_sche%';
SET GLOBAL event_scheduler = 1;  -- 開啟
-- SET GLOBAL event_scheduler = 0; -- 關閉

-- 2. 建立測試表
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
  `id` BIGINT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(100) NOT NULL DEFAULT '',
  `create_time` DATETIME,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 3. 建立存儲過程
DELIMITER //
DROP PROCEDURE IF EXISTS p_test//
CREATE PROCEDURE p_test()
BEGIN
  INSERT INTO `test`(`name`, `create_time`) VALUES ('testName', NOW());
END//

-- 4. 建立定時事件
DROP EVENT IF EXISTS e_test//
CREATE EVENT e_test
ON SCHEDULE EVERY 10 SECOND
STARTS TIMESTAMP '2014-04-09 01:00:00'
ON COMPLETION PRESERVE
DO
BEGIN
  CALL p_test();
END//
DELIMITER ;

關鍵指令速查表

操作SQL 指令
查看事件狀態SHOW EVENTS;
啟用特定事件ALTER EVENT e_test ON COMPLETION PRESERVE ENABLE;
禁用特定事件ALTER EVENT e_test ON COMPLETION PRESERVE DISABLE;
刪除事件DROP EVENT IF EXISTS e_test;

注意事項

  • DELIMITER:必須在定義存儲過程/事件前修改結束符,避免內部 `;` 衝突。
  • event_scheduler:全域變數,重啟 MySQL 服務後會恢復預設值 (OFF),生產環境建議加入配置文件 `my.cnf`:`event_scheduler=ON`。
  • 時間精度:MySQL Event 最小粒度為秒,不支援毫秒級調度。
  • 權限:需要 `EVENT` 權限才能創建/管理事件。

適用場景

  • 定時清理過期數據
  • 定時統計報表生成
  • 定時同步異構數據源
  • 任何需要週期性自動執行的維護任務
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved