1.開啟
全域變數event_scheduler用來設定是否伺服器端運行執行計畫任務,該變數有如下三種值:
OFF:計劃任務處於停止狀態,event scheduler線程沒有運行。是event_scheduler的預設值(執行一下任意一條命令關閉);
代碼如下 |
複製代碼 |
SET GLOBAL event_scheduler = OFF; SET @@global.event_scheduler = OFF; SET GLOBAL event_scheduler = 0; SET @@global.event_scheduler = 0; |
ON:計劃任務處於運行狀態,event scheduler線程啟動,並執行所有的計劃任務(執行一下任意一條命令開啟);
代碼如下 |
複製代碼 |
SET GLOBAL event_scheduler = ON; SET @@global.event_scheduler = ON; SET GLOBAL event_scheduler = 1; SET @@global.event_scheduler = 1; |
DISABLED:該值將致使計劃任務不可運行
運行MySql服務時候加上參數
代碼如下 |
複製代碼 |
--event-scheduler=DISABLED |
或者在my.cnf 中設定
查看原始碼列印協助
1 event_scheduler=DISABLED
MySQL的Event Scheduler是根據預先安排的計划進行資料庫操作的資料庫物件,可以看作是一種“時間觸發器”。Event實際上是被一個特殊的event scheduler線程執行的,假如它正在啟動並執行話,可以通過SHOW PROCESSLIST命令看到它。
2.建立
建立的基本文法是:
代碼如下 |
複製代碼 |
1 CREATE EVENT (1) 2 [IF NOT EXISTS] (2) 3 event_name (3) 4 ON SCHEDULE schedule (4) 5 [ON COMPLETION [NOT] PRESERVE] (5) 6 [ENABLE | DISABLE] (6) 7 [COMMENT 'comment'] (7) 8 DO sql_statement (8) |
逐條介紹:
(1) 建立Event嘛,這倆關鍵字當然不能少了
(2) 如果不存在同名的資料庫物件才建立
(3) 計劃任務的名字。作為資料庫物件,都有一個本庫內唯一的名字做標識
(4) 計劃任務的計劃,重點就在這兒。有兩個關鍵字來設定任務的執行計畫:AT和EVERY:
AT指定的是一個一次性計劃,後面跟著一個時間戳記,後續的sql語句將在指定的時間被執行一次;
EVERY指定的是一個周期性計劃,在該子句中可以指定從某時間點到某時間點期間,每隔某周期就執行一次該任務。
(5) 任務整個執行完畢後,該計劃任務對象是否還在資料庫中保留。預設不保留
(6) 有效或失效。預設有效
(7) 真正要執行的語句
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開始的一年內,每隔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; |
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'; |