程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL5.1新增EventScheduler功能【實現定時性的作業】

MySQL5.1新增EventScheduler功能【實現定時性的作業】

編輯:MySQL綜合教程

原先,LAMP的程序員為了完成一些周期性的數據庫操作任務,總是不得不借助於操作系統的幫助,比如Windows的計劃任務,或者Linux的contab。MySQL5.1終於新增了Event Scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發器和視圖之間的第20章Event Scheduler,在中文版中被刪減掉了,手冊的其他部分也沒有絲毫提到它,好像它根本就不存在一樣,所以它的知名度不是很高。有興趣的讀者可以參考http://dev.mysql.com/doc/refman/5.1/en/events.html獲得比較完整的幫助。

一、開啟
MySQL的Event Scheduler是根據預先安排的計劃進行數據庫操作的數據庫對象,可以看作是一種“時間觸發器”。Event實際上是被一個特殊的event scheduler線程執行的,假如它正在運行的話,可以通過SHOW PROCESSLIST命令看到它。全局變量event_scheduler用來設定是否服務器端運行執行計劃任務,該變量有如下三種值:
OFF:計劃任務處於停止狀態,event scheduler線程沒有運行。是event_scheduler的默認值;
ON:計劃任務處於運行狀態,event scheduler線程啟動,並執行所有的計劃任務;
DISABLED:該值將致使計劃任務不可運行

SET GLOBAL event_scheduler = ON;
SET @@global.event_scheduler = ON;
SET GLOBAL event_scheduler = 1;
SET @@global.event_scheduler = 1; 
創建Event Scheduler作為一種數據庫對象,其增刪改的DDL語句與其他對象非常相似,無非CREATE、ALTER、DROP等,創建的基本語法是:

CREATE EVENT (1)
[IF NOT EXISTS] (2)
event_name (3)
ON SCHEDULE schedule (4)
[ON COMPLETION [NOT] PRESERVE] (5)
[ENABLE | DISABLE] (6)
[COMMENT 'comment'] (7)
DO sql_statement (8)
(1) 創建Event嘛,這倆關鍵字當然不能少了;
(2) 如果不存在同名的數據庫對象才創建;
(3) 計劃任務的名字。作為數據庫對象,都有一個本庫內唯一的名字做標識
(4) 計劃任務的計劃,重點就在這兒。有兩個關鍵字來設定任務的執行計劃:AT和EVERY:
AT指定的是一個一次性計劃,後面跟著一個時間戳,後續的sql語句將在指定的時間被執行一次;
EVERY指定的是一個周期性計劃,在該子句中可以指定從某時間點到某時間點期間,每隔某周期就執行一次該任務。
(5) 任務整個執行完畢後,該計劃任務對象是否還在數據庫中保留。默認不保留
(6) 有效或失效。默認有效
(7) 真正要執行的語句實例,首先是一個一次性計劃任務的例子,該任務在指定的2008-02-06 23:59:00這個時間點,向messages表中插入一條記錄:
CREATE EVENT e_totals
ON SCHEDULE AT '2006-02-10 23:59:00'
DO
INSERT INTO messages VALUES (null, 'admin', '過年了!', '祝大家鼠年發大財!!!', '127.0.0.1',NOW());
下面是一個周期性計劃任務的例子,該任務在2008-02-06 23:59:00開始的一年內,每隔1小時就刪除掉messages表的早先的10條記錄:
CREATE EVENT e_hourly
ON SCHEDULE
EVERY 1 HOUR STARTS '2007-02-10 23:59:00' ENDS '2008-02-10 23:59:00'
DO
DELETE FROM messages limit 10;

計劃任務屬於數據庫服務器端的對象,創建好後,只要開啟了event_scheduler,就可以自動觸發執行了,不用在前台進行任何干預。當然一定要記住,只有MySQL5.1以上版本才支持該對象。


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved