使用MySQL計畫任務

2021-05-23 21:02:13 字數 2346 閱讀 2467

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

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計畫任務

原先,lamp的程式設計師為了完成一些週期性的資料庫操作任務,總是不得不借助於作業系統的幫助,比如windows的計畫任務,或者linux的contab。mysql5.1終於新增了event scheduler功能,可以直接在後台實現一下定時性的作業。但不知道什麼原因,在英文版的參考手冊中,位於觸發...

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...