日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL事件调度器(Event Scheduler)介绍

發布時間:2025/4/16 数据库 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL事件调度器(Event Scheduler)介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

事件調度器是在 MySQL 5.1 中新增的另一個特色功能,可以作為定時任務調度器,取代部分原先只能用操作系統任務調度器才能完成的定時功能。而且 MySQL 的事件調度器可以實現每秒鐘執行一個任務,這在一些對實時性要求較高的環境下就非常實用了。

事件調度器是定時觸發執行的,在這個角度上也可以稱作是”臨時的觸發器”。觸發器只是針對某個表產生的事件執行一些語句,而事件調度器則是在某一個(間隔)時間執行一些語句。事件是由一個特定的線程來管理的,也就是所謂的”事件調度器”。啟用事件調度器后,擁有 SUPER 權限的賬戶執行 SHOW PROCESSLIST 就可以看到這個線程了。通過設定全局變量event_scheduler 的值即可動態的控制事件調度器是否啟用。

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

SET GLOBAL event_scheduler = 1;


SET GLOBAL event_scheduler = ON;

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

mysqld ... --event_scheduler=1

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

SHOW VARIABLES LIKE 'event_scheduler';


SELECT @@event_scheduler;

二、創建事件(CREATE EVENT)

先來看一下它的語法:

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}

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秒鐘后,再執行查詢看看:

SELECT * FROM aaa;

+———————+

| timeline |

+———————+

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

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

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

+———————+

2) 5天后清空test表:

CREATE EVENT e_test

? ? ? ? ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 DAY

? ? ? ? DO TRUNCATE TABLE test.aaa;

3) 2007年7月20日12點整清空test表:

CREATE EVENT e_test

? ? ? ? ON SCHEDULE AT TIMESTAMP '2007-07-20 12:00:00'

? ? ? ? DO TRUNCATE TABLE test.aaa;

4) 每天定時清空test表:

CREATE EVENT e_test

? ? ? ? ON SCHEDULE EVERY 1 DAY

? ? ? ? DO TRUNCATE TABLE test.aaa;

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

CREATE EVENT e_test

? ? ? ? ON SCHEDULE EVERY 1 DAY

? ? ? ? STARTS CURRENT_TIMESTAMP + INTERVAL 5 DAY

? ? ? ? DO TRUNCATE TABLE test.aaa;

6) 每天定時清空test表,5天后停止執行:

CREATE EVENT e_test

? ? ? ? ON SCHEDULE EVERY 1 DAY

? ? ? ? ENDS CURRENT_TIMESTAMP + INTERVAL 5 DAY

? ? ? ? DO TRUNCATE TABLE test.aaa;

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。

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

CREATE EVENT e_test

? ? ? ? ON SCHEDULE EVERY 1 DAY

? ? ? ? ON COMPLETION NOT PRESERVE

? ? ? ? DO TRUNCATE TABLE test.aaa;

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

[COMMENT 'comment']可以給該事件加上注釋。

三、修改事件(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]

1) 臨時關閉事件

ALTER EVENT e_test DISABLE;

2) 開啟事件

ALTER EVENT e_test ENABLE;

3) 將每天清空test表改為5天清空一次:

ALTER EVENT e_test

? ? ? ? ON SCHEDULE EVERY 5 DAY;

四、刪除事件(DROP EVENT

語法很簡單,如下所示:

DROP EVENT [IF EXISTS] event_name

例如刪除前面創建的e_test事件

1

DROP EVENT e_test;

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

DROP EVENT IF EXISTS e_test;

五、后續


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

?

?

轉載于:https://blog.51cto.com/visionsky/761339

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的MySQL事件调度器(Event Scheduler)介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。