Event Scheduler是mysql新出的一個事件,他查一個計劃任務類的功能,我們可以通過在mysql中創(chuàng)建event來定時執(zhí)行一些sql語句,這個我們就完全不需要像以前一樣來利用系統(tǒng)的計劃任務來執(zhí)行定時任務了.
1.開啟
全局變量event_scheduler用來設定是否服務器端運行執(zhí)行計劃任務,該變量有如下三種值:
OFF:計劃任務處于停止狀態(tài),event scheduler線程沒有運行,是event_scheduler的默認值,執(zhí)行一下任意一條命令關閉,代碼如下:
- SET GLOBAL event_scheduler = OFF;
- SET @@global.event_scheduler = OFF;
- SET GLOBAL event_scheduler = 0;
- SET @@global.event_scheduler = 0;
ON:計劃任務處于運行狀態(tài),event scheduler線程啟動,并執(zhí)行所有的計劃任務,執(zhí)行一下任意一條命令開啟,代碼如下:
- SET GLOBAL event_scheduler = ON;
- SET @@global.event_scheduler = ON;
- SET GLOBAL event_scheduler = 1;
- SET @@global.event_scheduler = 1;
DISABLED:該值將致使計劃任務不可運行,運行MySql服務時候加上參數(shù),代碼如下:
--event-scheduler=DISABLED
或者在my.cnf 中設置,查看源代碼打印幫助.
1 event_scheduler=DISABLED
MySQL的Event Scheduler是根據(jù)預先安排的計劃進行數(shù)據(jù)庫操作的數(shù)據(jù)庫對象,可以看作是一種“時間觸發(fā)器”。Event實際上是被一個特殊的event scheduler線程執(zhí)行的,假如它正在運行的話,可以通過SHOW PROCESSLIST命令看到它。
2.創(chuàng)建
創(chuàng)建的基本語法是,代碼如下:
- 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)創(chuàng)建Event嘛,這倆關鍵字當然不能少了
(2)如果不存在同名的數(shù)據(jù)庫對象才創(chuàng)建
(3)計劃任務的名字,作為數(shù)據(jù)庫對象,都有一個本庫內(nèi)唯一的名字做標識
(4)計劃任務的計劃,重點就在這兒,有兩個關鍵字來設定任務的執(zhí)行計劃:AT和EVERY:AT指定的是一個一次性計劃,后面跟著一個時間戳,后續(xù)的sql語句將在指定的時間被執(zhí)行一次.
EVERY指定的是一個周期性計劃,在該子句中可以指定從某時間點到某時間點期間,每隔某周期就執(zhí)行一次該任務,
(5)任務整個執(zhí)行完畢后,該計劃任務對象是否還在數(shù)據(jù)庫中保留,默認不保留.
(6)有效或失效,默認有效.
(7)真正要執(zhí)行的語句.
3.示例
1.每10秒鐘向myschema.mytable表中插入時間戳,代碼如下:
CREATE EVENT e_store_ts ON SCHEDULE EVERY 10 SECOND DO INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP());
2.在2008-02-06 23:59:00開始的一年內(nèi),每隔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′ --Vevb.com
- DO
- DELETE FROM messages limit 10;
4.查看EVENT,代碼如下:
- mysql>SELECT * FROM INFORMATION_SCHEMA.EVENTS
- > WHERE EVENT_NAME='e_store_ts'
- > AND EVENT_SCHEMA='myschema'G
- *************************** 1. row ***************************
- EVENT_CATALOG: NULL
- EVENT_SCHEMA: myschema
- EVENT_NAME: e_store_ts
- DEFINER: jon@ghidora
- EVENT_BODY: SQL
- EVENT_DEFINITION: INSERT INTO myschema.mytable VALUES (UNIX_TIMESTAMP())
- EVENT_TYPE: RECURRING
- EXECUTE_AT: NULL
- INTERVAL_VALUE: 5
- INTERVAL_FIELD: SECOND
- SQL_MODE: NULL
- STARTS: 0000-00-00 00:00:00
- ENDS: 0000-00-00 00:00:00
- STATUS: ENABLED
- ON_COMPLETION: NOT PRESERVE
- CREATED: 2006-02-09 22:36:06
- LAST_ALTERED: 2006-02-09 22:36:06
- LAST_EXECUTED: NULL
- EVENT_COMMENT:
- 1 row in set (0.00 sec)
5.刪除EVENT,代碼如下:
- DELETE FROM mysql.event
- WHERE db = 'myschema'
- AND definer = 'jon@ghidora'
- AND name = 'e_insert';
|
新聞熱點
疑難解答
圖片精選