mysql事件定时_MySQL事件(定时任务)
what's the MySQL 事件
MySQL5.1 版本開始引進 event 概念,MySQL 中的事件(event:時間觸發器)是用于執行定時或周期性的任務,類似 Linux 中的 crontab,事件可以精確到秒。通過單獨或調用存儲過程使用,在某一特定的時間點,觸發相關的 SQL 語句或存儲過程。事件由一個特定的線程來管理的,也就是所謂的事件調度器,但是事件不能直接調用。
總的來說,事件,就是定時任務的管理器。
查看事件調度器是否開啟
事件由一個特定的線程來管理。啟用事件調度器后,擁有 SUPER 權限的賬戶執行 SHOW PROCESSLIST 就可以看到這個線程了。
SHOW VARIABLES LIKE 'event_scheduler';SELECT @@event_scheduler;
SHOW PROCESSLIST;
開啟或關閉事件管理器
--開啟事件調度器
SET GLOBAL event_scheduler = ON;--關閉事件調度器
SET GLOBAL event_scheduler = OFF;--查看事件調度器狀態
SHOW VARIABLES LIKE 'event_scheduler';
注意:如果想要始終開啟事件,那么在使用SET GLOBAL開啟事件后,還需要在配置文件(Windows系統my.ini、Linux系統my.cnf)中添加 event_scheduler=on 并重啟數據庫服務。因為如果沒有添加,MySQL重啟事件后又會回到原來的狀態。
創建存儲過程
MySQL 事件一般配合 MySQL 存儲過程使用,頂一萬 MySQL 存儲過程后由 MySQL 事件進行觸發調用。
事件的主要操作
事件的主要操作有:創建、查詢、修改、刪除、開啟和關閉。
創建事件
語法結構
CREATE
[DEFINER={user | CURRENT_USER}]EVENT[IF NOT EXISTS]event_nameONSCHEDULE schedule[ON COMPLETION [NOT]PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']DO event_body;
DEFINER --可選,用于定義事件執行時檢查權限的用戶
IF NOT EXISTS --可選,用于判斷要創建的事件是否存在
EVENT event_name --必選,用于指定事件名,event_name的最大長度為64個字符,如果為指定event_name,則默認為當前的MySQL用戶名(不區分大小寫)
ON SCHEDULE schedule --必選,用于定義執行的時間和時間間隔
ON COMPLETION [NOT] PRESERVE --可選,用于定義事件是否循環執行,即是一次執行還是永久執行,默認為一次執行,即 NOT PRESERVE
ENABLE | DISABLE | DISABLE ON SLAVE --可選,用于指定事件的一種屬性。
--其中,關鍵字ENABLE表示該事件是活動的,也就是調度器檢查事件是否必選調用;
--關鍵字DISABLE表示該事件是關閉的,也就是事件的聲明存儲到目錄中,但是調度器不會檢查它是否應該調用;
--關鍵字DISABLE ON SLAVE表示事件在從機中是關閉的。如果不指定這三個選擇中的任意一個,則在一個事件創建之后,它立即變為活動的。
COMMENT 'comment' --可選,用于定義事件的注釋
DO event_body --必選,用于指定事件啟動時所要執行的代碼??梢允侨魏斡行У腟QL語句、存儲過程或者一個計劃執行的事件。如果包含多條語句,可以使用BEGIN...END復合結構
參數說明
示例
create event second_event --創建名為 second_event 的事件,注意此處沒有括號
on schedule every 1 second --創建周期定時的規則,每秒鐘執行一次
on completion preserve disable --創建后并不開始生效
do call test_proce(); --do call test_proce() 是該事件的操作內容,表示調用名為 test_proce() 的存儲過程。
執行時間相關的例子
on schedule every 1 second --每秒執行1次
on schedule every 2 minute --每兩分鐘執行1次
on schedule every 3 day --每3天執行1次
ON schedule every 1 day starts date_add(date_add_curdate(), interval 1 day), interval 1 hour) --每天凌晨1點執行
ON schedule every 1 month starts date_add(date_add(date_sub(curdatte(),interval day(curdate())-1 day),interval 1 month),interval 1 hour) --每個月的第一天凌晨1點執行
on schedule at current_timestamp()+interval 5 day --5天后執行
on schedule at current_timestamp()+interval 10 minute --10分鐘后執行
on schedule at '2016-10-01 21:50:00' --在2016年10月1日,晚上9點50執行
ON SCHEDULE EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK --每 3 個月,從現在起一周后開始
ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK --每十二個小時,從現在起三十分鐘后開始,并于現在起四個星期后結束
on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month --5天后開始每天都執行執行到下個月底
on schedule every 1 day ends current_timestamp()+interval 5 day --從現在起每天執行,執行5天
有關執行時間需要注意的點
在 event 事件中:ON SCHEDULE 計劃任務,有兩種設定計劃任務的方式:
(1)AT 時間戳,用來完成單次的計劃任務。時間戳可以是任意的TIMESTAMP 和DATETIME 數據類型,時間戳需要大于當前時間
(2)EVERY 時間(單位)的數量實踐單位[STARTS 時間戳] [ENDS時間戳],用來完成重復的計劃任務??梢允侨我夥强?Not Null)的整數式,時間單位是關鍵詞:YEAR,MONTH,DAY,HOUR,MINUTE 或者 SECOND。
提示: 其他的時間單位也是合法的如:QUARTER, WEEK, YEAR_MONTH,DAY_HOUR,DAY_MINUTE,DAY_SECOND,HOUR_MINUTE,HOUR_SECOND, MINUTE_SECOND,不建議使用這些不標準的時間單位。
[ON COMPLETION [NOT] PRESERVE]:ON COMPLETION參數表示"當這個事件不會再發生的時候",即當單次計劃任務執行完畢后或當重復性的計劃任務執行到了ENDS階段。而PRESERVE的作用是使事件在執行完畢后不會被Drop掉,建議使用該參數,以便于查看EVENT具體信息。
查看事件
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;
修改事件
語法結構
ALTER EVENT 語句與 CREATE EVENT 語句基本相同。另外 ALTER EVENT 語句還有一個用法就是讓一個事件關閉或再次活動。
ALTER
[DEFINER={user | CURRENT_USER}]EVENT[IF NOT EXISTS]event_nameONSCHEDULE schedule[ON COMPLETION [NOT]PRESERVE][ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']DO event_body;
刪除事件
DROP EVENT IF EXISTS 事件名;
開啟事件
alter event 事件名 on completion preserve enable; --開啟定時任務
關閉事件
alter event 事件名 on completion preserve disable; --關閉定時任務
總結
以上是生活随笔為你收集整理的mysql事件定时_MySQL事件(定时任务)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 显卡超频详细介绍(显卡超频详细介绍图)
- 下一篇: 写得最好十大穿越小说(十大公认文笔超好的