首頁 > 資料庫 > mysql教程 > 詳解MySQL新增的功能(事件調度器)實例

詳解MySQL新增的功能(事件調度器)實例

零下一度
發布: 2017-05-09 12:00:49
原創
1531 人瀏覽過

概述

事件調度器是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伺服器上的事件是否開啟。
查看事件是否開啟,使用以下指令查看:

1

2

3

4

5

6

7

8

9

#方式一

SHOW VARIABLES LIKE &#39;event_scheduler&#39;;

#方式二

SELECT @@event_scheduler;

#方式三

SHOW PROCESSLIST;

 

#查看事件状态

SHOW EVENTS;

登入後複製

如果看到event_scheduler為on或PROCESSLIST中顯示有event_scheduler的資訊說明就已經開啟了事件。如果顯示為off或在PROCESSLIST中查看不到event_scheduler的訊息,那麼就表示事件沒有開啟,我們需要開啟它。

開啟事件功能

方式一、透過動態參數修改

1

SET GLOBAL event_scheduler = ON;

登入後複製

更改完這個參數就立刻生效了,但是重啟mysql又還原了,也就是設定不能跨重啟。
方式二、更改設定檔然後重啟
在my.cnf中的[mysqld]部分加入如下內容,然後重啟mysql。

1

event_scheduler=ON;

登入後複製

一勞永逸,需要能夠修改資料庫設定的權限。

方式三、直接在啟動指令加上「–event_scheduler=1」

#

1

mysqld ... --event_scheduler=ON

登入後複製

事件的語法

##1.  建立事件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

CREATE

    [DEFINER = { user | CURRENT_USER }]

    EVENT

    [IF NOT EXISTS]

    event_name

    ON SCHEDULE schedule

    [ON COMPLETION [NOT] PRESERVE]

    [ENABLE | DISABLE | DISABLE ON SLAVE]

    [COMMENT &#39;comment&#39;]

    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: 定義事件執行的時候檢查權限的使用者。

ON SCHEDULE schedule: 定義執行的時間和時間間隔。
ON COMPLETION [NOT] PRESERVE: 定義事件是一次執行還是永久執行,預設為一次執行,即NOT PRESERVE。
ENABLE | DISABLE | DISABLE ON SLAVE: 定義事件建立以後是開啟或關閉,以及從上關閉。如果是從伺服器自動同步主上的建立事件的語句的話,會自動加上DISABLE ON SLAVE。
COMMENT 'comment': 定義事件的
註解

2.  更改事件

1

2

3

4

5

6

7

8

9

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 &#39;comment&#39;]

    [DO event_body]

登入後複製

#3. 刪除事件的語法

1

DROP EVENT [IF EXISTS] event_name;

登入後複製



詳解MySQL新增的功能(事件調度器)實例

# #事件使用範例

1. 建立事件

#範例一
定時每隔3秒向表test2中

插入資料

1

2

3

4

<strong>create event event_insert_t2

on schedule every 3 second

on completion preserve

do insert into test2(department,time_v) value(&#39;1&#39;,now());</strong>

登入後複製
執行結果

#事件執行結果
範例二

建立一個10分鐘後清空test表資料的事件

1

2

3

4

CREATE EVENT IF NOT EXISTS event_truncate_test2

ON SCHEDULE

AT CURRENT_TIMESTAMP + INTERVAL 10 MINUTE

DO TRUNCATE TABLE test2;

登入後複製

#舉例三

建立一個在2015-04-17 14:42:00時刻清空test表資料的事件

1

2

3

4

5

DROP EVENT IF EXISTS event_truncate_test2;

CREATE EVENT event_truncate_test2

ON SCHEDULE

AT TIMESTAMP &#39;2015-04-17 14:42:00&#39;

DO TRUNCATE TABLE test2;

登入後複製
舉例四5天後開啟每天定時3秒向表test2中插入數據,一個月後停止執行

1

2

3

4

5

6

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(&#39;1&#39;,NOW());

登入後複製

#修改事件範例

  1. 範例一

    暫時關閉事件
  2. 1

    alter event event_insert_t2 disable;

    登入後複製
  3. 其他類似建立事件。

  4. 刪除事件範例
  5. 1

    DROP EVENT IF EXISTS event_insert_t2;

    登入後複製
    事件呼叫儲存程序
  6. 函數

    如同普通呼叫。
  7. 事件的優缺點及應用場景

  8. #優點
  9. 定時任務由dba統一管理,避免部署在作業系統層。
  10. 減少系統管理員產生誤操作的風險。

  11. 有利於後續的管理與維護。

  12. 缺點

    在繁忙且要求效能的資料庫上慎重部署和啟用調度器。

    過於複雜的處理更適合使用程式實作。

    #########開啟和關閉事件需要具有超級使用者權限。 ############應用程式場景###適用於定期收集統計信息,定期清除歷史數據,定期資料庫檢查等等。 ############【相關推薦】######1. ###免費mysql線上影片教學#########2. ###MySQL最新手冊教學######

    3. 布林教育燕十八mysql入門影片教學

    #

    以上是詳解MySQL新增的功能(事件調度器)實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板