事件調度器是MySQL5.1後新增的功能,可以將資料庫按自訂的時間週期觸發某種操作,可以理解為時間觸發器,類似於<a href="http://www.php.cn/wiki/1497.html" target="_blank">linux</a>系統下面的任務調度器crontab,或類似與window下面的計劃任務
。值得一提的是MySQL的事件調度器可以精確到每秒鐘執行一個任務,而作業系統的排程任務(如:Linux下的CRON或Windows下的任務計畫)只能精確到每分鐘執行一次。
在使用事件這個功能,首先要確保你的mysql的版本是5.1以上,然後還要查看你的mysql伺服器上的事件是否開啟。
查看事件是否開啟,使用以下指令查看:
#方式一 SHOW VARIABLES LIKE 'event_scheduler'; #方式二 SELECT @@event_scheduler; #方式三 SHOW PROCESSLIST; #查看事件状态 SHOW EVENTS;
如果看到event_scheduler為on或PROCESSLIST中顯示有event_scheduler的資訊說明就已經開啟了事件。如果顯示為off或在PROCESSLIST中查看不到event_scheduler的訊息,那麼就表示事件沒有開啟,我們需要開啟它。
方式一、透過動態參數修改
SET GLOBAL event_scheduler = ON;
更改完這個參數就立刻生效了,但是重啟mysql又還原了,也就是設定不能跨重啟。
方式二、更改設定檔然後重啟
在my.cnf中的[mysqld]部分加入如下內容,然後重啟mysql。
event_scheduler=ON;
一勞永逸,需要能夠修改資料庫設定的權限。
方式三、直接在啟動指令加上「–event_scheduler=1」
#mysqld ... --event_scheduler=ON
CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] DO event_body; schedule: AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
ON SCHEDULE schedule: 定義執行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行還是永久執行,預設為一次執行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件建立以後是開啟或關閉,以及從上關閉。如果是從伺服器自動同步主上的建立事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT 'comment': 定義事件的
註解。
ALTER [DEFINER = { user | CURRENT_USER }] EVENT event_name [ON SCHEDULE schedule] [ON COMPLETION [NOT] PRESERVE] [RENAME TO new_event_name] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] [DO event_body]
DROP EVENT [IF EXISTS] event_name;
1. 建立事件
#範例一
定時每隔3秒向表test2中
create event event_insert_t2
on schedule every 3 second
on completion preserve
do insert into test2(department,time_v) value('1',now());
執行結果
#事件執行結果
範例二
建立一個10分鐘後清空test表資料的事件
CREATE EVENT IF NOT EXISTS event_truncate_test2 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE DO TRUNCATE TABLE test2;
DROP EVENT IF EXISTS event_truncate_test2; CREATE EVENT event_truncate_test2 ON SCHEDULE AT TIMESTAMP '2015-04-17 14:42:00' DO TRUNCATE TABLE test2;舉例四5天後開啟每天定時3秒向表test2中插入數據,一個月後停止執行
CREATE EVENT IF NOT EXISTS event_truncate_test2 ON SCHEDULE EVERY 3 SECOND STARTS CURRENT_TIMESTAMP + INTERVAL 5 day ENDS CURRENT_TIMESTAMP + INTERVAL 1 month ON COMPLETION PRESERVE DO INSERT INTO test2(department,time_v) VALUES('1',NOW());
alter event event_insert_t2 disable;
DROP EVENT IF EXISTS event_insert_t2;事件呼叫
函數
如同普通呼叫。事件的優缺點及應用場景
有利於後續的管理與維護。
缺點
#########開啟和關閉事件需要具有超級使用者權限。 ############應用程式場景###適用於定期收集統計信息,定期清除歷史數據,定期資料庫檢查等等。 ############【相關推薦】######1. ###免費mysql線上影片教學#########2. ###MySQL最新手冊教學#######以上是詳解MySQL新增的功能(事件調度器)實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!