原先,lamp的程式設計師為了完成一些週期性的資料庫操作任務,總是不得不借助於作業系統的幫助,比如windows的計畫任務,或者linux的contab。mysql5.1終於新增了event scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發器和檢視之間的第20章event scheduler,在中文版中被刪減掉了,手冊的其他部分也沒有絲毫提到它,好像它根本就不存在一樣,所以它的知名度不是很高。有興趣的讀者可以參考
獲得比較完整的幫助。
1.1 開啟
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;
1.2 建立
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) 真正要執行的語句
1.3 例項
首先是乙個一次性計畫任務的例子,該任務在指定的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'
dodelete from messages limit 10;
計畫任務屬於資料庫伺服器端的物件,建立好後,只要開啟了event_scheduler,就可以自動觸發執行了,不用在前台進行任何干預。當然一定要記住,只有mysql5.1以上版本才支援該物件。
create event e_test on schedule every 24 hour do
insert into table1(..) select … from table2 where pdate < date_format(now(), 『%y-%m-%d』);
使用MySQL計畫任務
原先為了完成一些週期性的資料庫操作任務,總是不得不借助於作業系統的幫助,比如windows的計畫任務,或者linux的contab。mysql5.1終於新增了event scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發器和檢視之間的第20章...
mysql計畫任務
1 檢查你的mysql是否開了這個功能 show variables like event scheduler 我執行了一遍發現記錄為空說明我的mysql沒有開呢。ok解決辦法 2 開啟你的mysql的計畫任務功能 使用這個功能之前必須確保event scheduler已開啟,可執行 set glo...
mysql計畫任務 event schedule
mysql的event schedule 可以讓你設定你的mysql資料庫再某段時間執行你想要的動作 這與檢視是不相同的。create event test1 on schedule every 1 day starts 2007 09 01 12 00 00 on completion not p...