久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL事件調度器的用法介紹

132次閱讀
沒有評論

共計 4248 個字符,預計需要花費 11 分鐘才能閱讀完成。

本篇內容主要講解“MySQL 事件調度器的用法介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“MySQL 事件調度器的用法介紹”吧!

事件調度器有時也可稱為臨時觸發器 (temporal triggers),因為事件調度器是基于特定時間周期觸發來執行某些任務,而觸發器(Triggers) 是基于某個表所產生的事件觸發的,區別也就在這里。

在使用這個功能之前必須確保 event_scheduler 已開啟,可執行

SET GLOBAL event_scheduler = 1;

或我們可以在配置 my.ini 文件 中加上 event_scheduler = 1 或

SET GLOBAL event_scheduler = ON;

來開啟,也可以直接在啟動命令加上“ndash;event_scheduler=1”,例如:

d … –event_scheduler=1

要查看當前是否已開啟事件調度器,可執行如下 SQL:

SHOW VARIABLES LIKE event_scheduler

SELECT @@event_scheduler;

擁有 SUPER 權限的賬戶執行 SHOW PROCESSLIST 就可以看到這個線程了

5.3、定時服務配置

先來看一下它的語法:

CREATE EVENT [IF NOT EXISTS] event_name

  ON SCHEDULE schedule

  [ON COMPLETION [NOT] PRESERVE]

  [ENABLE | DISABLE]

  [COMMENT comment]

  DO sql_statement;

schedule:

  AT TIMESTAMP [+ INTERVAL INTERVAL]

| EVERY INTERVAL [STARTS TIMESTAMP] [ENDS TIMESTAMP]

INTERVAL:

  quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |

  WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |

  DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

5.3.1 每秒插入一條記錄到數據表

USE test;

CREATE TABLE aaa (timeline TIMESTAMP);

CREATE EVENT e_test_insert

ON SCHEDULE EVERY 1 SECOND

DO INSERT INTO test.aaa VALUES (CURRENT_TIMESTAMP);

等待 3 秒鐘后,再執行查詢看看:

mysql SELECT * FROM aaa;

+———————+

| timeline  |

+———————+

| 2007-07-18 20:44:26 |

| 2007-07-18 20:44:27 |

| 2007-07-18 20:44:28 |

+———————+

5.3.2 5 秒 (天) 后清空 test 表

CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 SECOND

DO TRUNCATE TABLE test.aaa;

CREATE EVENT e_test

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

5.3.3 2008 年 5 月 23 日 9 點 39 分 20 秒整清空 test 表

CREATE EVENT e_test

ON SCHEDULE AT TIMESTAMP 2008-05-23 9:39:20

DO TRUNCATE TABLE test.aaa;

這個測試有問題。還不太明白原因。

5.3.4 每天定時清空 test 表

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

DO TRUNCATE TABLE test.aaa;

5.3.5 5 天后開啟每天定時清空 test 表

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

這里 5 天也可以為 0 天,當時就開啟清空表

5.3.6 每天定時清空 test 表,5 天后停止執行

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

DO TRUNCATE TABLE test.aaa;

該設置要求天數大于 1,否則報錯。而且創建不成功

5.3.7 5 天后開啟每天定時清空 test 表,一個月后停止執行

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

ENDS CURRENT_TIMESTAMP + INTERVAL 1 MONTH

DO TRUNCATE TABLE test.aaa;[ON COMPLETION [NOT] PRESERVE]

可以設置這個事件是執行一次還是持久執行,默認為 NOT PRESERVE。

該事件會停止每隔一秒插入數據的事件,感覺這點上 mysql 做的還是有問題。

5.3.8 每天定時清空 test 表(只執行一次,任務完成后就終止該事件)

CREATE EVENT e_test

ON SCHEDULE EVERY 1 DAY

ON COMPLETION NOT PRESERVE

DO TRUNCATE TABLE test.aaa;

[ENABLE | DISABLE]可是設置該事件創建后狀態是否開啟或關閉,默認為 ENABLE。

[COMMENT lsquo;comment rsquo;]可以給該事件加上注釋。

5.4、定時服務日常維護測試

5.4.1 修改事件(ALTER EVENT)

ALTER EVENT event_name

  [ON SCHEDULE schedule]

  [RENAME TO new_event_name]

  [ON COMPLETION [NOT] PRESERVE]

  [COMMENT comment]

  [ENABLE | DISABLE]

  [DO sql_statement]

a、臨時關閉事件

ALTER EVENT e_test DISABLE;

b、開啟事件

ALTER EVENT e_test ENABLE;

c、將每天清空 test 表改為 5 天清空一次:

ALTER EVENT e_test

ON SCHEDULE EVERY 5 DAY;

d、重命名事件并加上注釋

alter event test.new_e_test rename to e_test comment e_test_cm

5.4.2 刪除事件(DROP EVENT)

語法很簡單,如下所示:

DROP EVENT [IF EXISTS] event_name 例如刪除前面創建的 e_test 事件

DROP EVENT e_test; 當然前提是這個事件存在,否則會產生 ERROR 1513 (HY000): Unknown event 錯誤,因此最好加上 IF EXISTS

DROP EVENT IF EXISTS e_test;

5.4.3 查看事件

a、查看一個 event 的詳細信息可以用下面的視圖:

SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = test_insert   AND EVENT_SCHEMA = test

b、簡要列出所有的 event:show events

語法:

SHOW EVENTS [FROM schema_name]

  [LIKE pattern | WHERE expr]

格式化顯示所有 event

SHOW EVENTS\G

格式化顯示 test 用戶的 event

show events FROM test;

c、查看 event 的創建信息

SHOW CREATE EVENT event_name

show create event test.e_test\G

5.5、結論

該特性確實非常有用,可作為定時清空數據表、監控主從服務器、匯總數據到另一張表等等,并且可以精確到每秒,實時性也可以得到保障。

不過如果當兩個事件的針對相同的對象的時候,會出現沖突,這種情況還不明確是我理解的問題還是確實是這樣,比如每秒插入和定時刪除就會沖突。除了調度 SQL 語句之外,MYSQL 的調度器也可以調度存儲過程。

5.6、缺點

SELECT * FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_NAME = test_insert   AND EVENT_SCHEMA = troaudit_db

*************************** 1. row ***************************

  EVENT_CATALOG: NULL

  EVENT_SCHEMA: troaudit_db

  EVENT_NAME: event_session_table

  DEFINER: egilance@%

  TIME_ZONE: SYSTEM

  EVENT_BODY: SQL

  EVENT_DEFINITION: BEGIN

  CALL create_table_process;

   END

  EVENT_TYPE: RECURRING

  EXECUTE_AT: NULL

  INTERVAL_VALUE: 1800

  INTERVAL_FIELD: SECOND

  SQL_MODE:

  STARTS: 2011-08-23 10:51:28

  ENDS: NULL

  STATUS: ENABLED

  ON_COMPLETION: PRESERVE

  CREATED: 2011-08-23 10:51:28

  LAST_ALTERED: 2011-08-23 10:51:28

  LAST_EXECUTED: 2011-08-23 17:55:51

  EVENT_COMMENT:

  ORIGINATOR: 0

CHARACTER_SET_CLIENT: utf8

COLLATION_CONNECTION: utf8_general_ci

  DATABASE_COLLATION: utf8_unicode_ci

1 row in set (0.00 sec)

MySQL 只會記錄最后一次調度的時間,如果時間往前調整,小于最近執行的時間,則不會執行事件調度。

到此,相信大家對“MySQL 事件調度器的用法介紹”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-01發表,共計4248字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 托里县| 全南县| 新泰市| 荥阳市| 定州市| 怀柔区| 乌恰县| 靖西县| 遂溪县| 庐江县| 安阳市| 乌鲁木齐县| 营山县| 金坛市| 察雅县| 潢川县| 仙居县| 万源市| 衡水市| 确山县| 富顺县| 聂荣县| 右玉县| 奉化市| 绥宁县| 遵义市| 息烽县| 镇原县| 中卫市| 尉犁县| 三台县| 许昌县| 开化县| 门头沟区| 高尔夫| 道孚县| 威海市| 深水埗区| 华坪县| 通化市| 昌宁县|