詳細說明MySQL新增的技巧(事件調(diào)度器)案例
發(fā)表時間:2023-08-31 來源:明輝站整理相關軟件相關文章人氣:
[摘要]概述事件調(diào)度器是MySQL5.1后新增的功能,可以將數(shù)據(jù)庫按自定義的時間周期觸發(fā)某種操作,可以理解為時間觸發(fā)器,類似于linux系統(tǒng)下面的任務調(diào)度器crontab,或者類似與window下面的計劃任務。值得一提的是MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個任務,而操作系統(tǒng)的計劃任務(如:Lin...
概述
事件調(diào)度器是MySQL5.1后新增的功能,可以將數(shù)據(jù)庫按自定義的時間周期觸發(fā)某種操作,可以理解為時間觸發(fā)器,類似于linux系統(tǒng)下面的任務調(diào)度器crontab,或者類似與window下面的計劃任務
。值得一提的是MySQL的事件調(diào)度器可以精確到每秒鐘執(zhí)行一個任務,而操作系統(tǒng)的計劃任務(如:Linux下的CRON或Windows下的任務計劃)只能精確到每分鐘執(zhí)行一次。
查看事件功能是否開啟
在使用事件這個功能,首先要保證你的mysql的版本是5.1以上,然后還要查看你的mysql服務器上的事件是否開啟。
查看事件是否開啟,使用如下命令查看:
#方式一
SHOW VARIABLES LIKE 'event_scheduler';
#方式二
SELECT @@event_scheduler;
#方式三
SHOW PROCESSLIST;
#查看事件狀態(tài)
SHOW EVENTS;
如果看到event_scheduler為on或者PROCESSLIST中顯示有event_scheduler的信息說明就已經(jīng)開啟了事件。如果顯示為off或者在PROCESSLIST中查看不到event_scheduler的信息,那么就說明事件沒有開啟,我們需要開啟它。
開啟事件功能
方式一、通過動態(tài)參數(shù)修改
SET GLOBAL event_scheduler = ON;
更改完這個參數(shù)就立刻生效了,但是重啟mysql又還原了,即設置不能跨重啟。
方式二、更改配置文件然后重啟
在my.cnf中的[mysqld]部分添加如下內(nèi)容,然后重啟mysql。
event_scheduler=ON;
一勞永逸,需要能夠修改數(shù)據(jù)庫配置的權限。
方式三、直接在啟動命令加上“–event_scheduler=1”
mysqld ... --event_scheduler=ON
事件的語法
1. 創(chuàng)建事件
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}
DEFINER: 定義事件執(zhí)行的時候檢查權限的用戶。
ON SCHEDULE schedule: 定義執(zhí)行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執(zhí)行還是永久執(zhí)行,默認為一次執(zhí)行,即NOT PRESERVE。
ENABLE DISABLE DISABLE ON SLAVE: 定義事件創(chuàng)建以后是開啟還是關閉,以及在從上關閉。如果是從服務器自動同步主上的創(chuàng)建事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT 'comment': 定義事件的注釋。
2. 更改事件
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]
3. 刪除事件的語法
DROP EVENT [IF EXISTS] event_name;
事件使用舉例
1. 創(chuàng)建事件
舉例一
定時每隔3秒向表test2中插入數(shù)據(jù)
create event event_insert_t2
on schedule every 3 second
on completion preserve
do insert into test2(department,time_v) value('1',now());
執(zhí)行結果

事件執(zhí)行結果
舉例二
創(chuàng)建一個10分鐘后清空test表數(shù)據(jù)的事件
CREATE EVENT IF NOT EXISTS event_truncate_test2
ON SCHEDULE
AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO TRUNCATE TABLE test2;
舉例三
創(chuàng)建一個在2015-04-17 14:42:00時刻清空test表數(shù)據(jù)的事件
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中插入數(shù)據(jù),一個月后停止執(zhí)行
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;
其他類似創(chuàng)建事件。
刪除事件舉例
DROP EVENT IF EXISTS event_insert_t2;
事件調(diào)用存儲過程或函數(shù)如同普通調(diào)用。
事件的優(yōu)缺點及應用場景
優(yōu)點
定時任務由dba統(tǒng)一管理,避免部署在操作系統(tǒng)層。
減少系統(tǒng)管理員產(chǎn)生誤操作的風險。
有利于后續(xù)的管理和維護。
缺點
在繁忙且要求性能的數(shù)據(jù)庫上慎重部署和啟用調(diào)度器。
過于復雜的處理更適合使用程序?qū)崿F(xiàn)。
開啟和關閉事件需要具有超級用戶權限。
應用場景
適用于定期收集統(tǒng)計信息,定期清除歷史數(shù)據(jù),定期數(shù)據(jù)庫檢查等等。
【相關推薦】
1. 免費mysql在線視頻教程
2. MySQL最新手冊教程
3. 布爾教育燕十八mysql入門視頻教程
以上就是詳解MySQL新增的功能(事件調(diào)度器)實例的詳細內(nèi)容,更多請關注php中文網(wǎng)其它相關文章!
學習教程快速掌握從入門到精通的SQL知識。