前言:
事件調度器是Mysql5.1後新增的功能,可以將數據庫按自定義的時間週期觸發某種操作,即類似linux系統下的任務調度器crontab。
定義:
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}
說明:中括號中爲可選擇項,可指定任務執行的頻率.
舉例熟悉事件調度器的使用:
1.創建測試表test
mysql> create table test(id1 varchar(10),create_time datetime);
Query OK, 0 rows affected (0.06 sec)
2.創建事件調度器test_event,每隔5秒向test表插入一條記錄
mysql> create event test_event on schedule every 5 second do insert into test.test (id1,create_time) values ('test',now());
Query OK, 0 rows affected (0.06 sec)
3.查看調度器狀態
mysql> show events \G
*************************** 1. row ***************************
Db: yibei
Name: test_event
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 5
Interval field: SECOND
Starts: 2020-04-05 12:41:17
Ends: NULL
Status: ENABLED
Originator: 0
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
4.間隔幾秒後,查看test表,發現並沒有數據插入
mysql> select * from test;
Empty set (0.02 sec)
5.查看事件調度器狀態
mysql> show variables like '%scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+
1 row in set (0.00 sec)
注:mysql事件調度器默認是關閉的。
開啓mysql事件調度器的方法:
1)臨時開啓,重啓mysql服務後失效。
mysql> set global event_scheduler = 1; ---(可以將1替換爲on)
Query OK, 0 rows affected (0.00 sec)
2)永久開啓,在my.cnf中的[mysqld]部分添加
event_scheduler=1 ---(需要重啓mysql服務)
#在看上述例子的test表:
mysql> select * from test;
+------+---------------------+
| id1 | create_time |
+------+---------------------+
| test | 2020-04-05 12:59:27 |
| test | 2020-04-05 12:59:32 |
| test | 2020-04-05 12:59:37 |
| test | 2020-04-05 12:59:42 |
4 rows in set (0.00 sec)
當不在使用事件調度器時,可以禁用(disable)或刪除(drop)
1.禁用event
mysql> alter event test_event disable;
Query OK, 0 rows affected (0.00 sec)
2,刪除event
mysql> drop event test_event;
Query OK, 0 rows affected (0.00 sec)