34.1 配置事件调度器
mysql> show processlist\G*************************** 1. row ***************************
Id: 5
User: event_scheduler
Host: localhost
db: NULLCommand: Daemon Time: 21
State: Waiting on empty queue
Info: NULL*************************** 2. row ***************************
Id: 8
User: root
Host: localhost:59956
db: NULLCommand: Query Time: 0
State: starting
Info: show processlist2 rows in set (0.00 sec)
ON,默认设置,表示启用事件调度器线程,负责事件的调度和执行。
OFF,关闭事件调度器线程,SHOW PROCESSLIST 命令不再显示相关信息,计划事件不再执行。
DISABLED,禁用事件调度器线程,不但停止了调度器线程,而且无法通过 ON 或者 OFF 设置它的状态。
mysql> show global variables like 'event_scheduler';+-----------------+-------+| Variable_name | Value |+-----------------+-------+| event_scheduler | ON |+-----------------+-------+1 row in set, 1 warning (0.06 sec)
-- 启动事件调度器SET GLOBAL event_scheduler = ON;SET @@GLOBAL.event_scheduler = 1;-- 关闭事件调度器SET GLOBAL event_scheduler = OFF;SET @@GLOBAL.event_scheduler = 0;
--event-scheduler=DISABLED
event_scheduler=DISABLED
34.2 创建计划事件
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [COMMENT 'string']
DO event_body;
AT timestamp [+ INTERVAL interval] ...EVERY interval[STARTS timestamp [+ INTERVAL interval] ...][ENDS timestamp [+ INTERVAL interval] ...]
CREATE TABLE t_event(id int auto_increment primary key, ts timestamp);CREATE EVENT event1ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 10 SECONDDOINSERT INTO t_event(ts) VALUES (CURRENT_TIMESTAMP);
mysql> select * from t_event;+------+---------------------+| id | ts |+------+---------------------+| 1 | 2020-10-07 21:31:29 |+------+---------------------+1 row in set (0.00 sec)
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
CREATE EVENT event1 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 10 SECONDON COMPLETION PRESERVE DO INSERT INTO t_event(ts) VALUES (CURRENT_TIMESTAMP);
CREATE EVENT event2 ON SCHEDULE EVERY 5 MINUTE STARTS CURRENT_TIMESTAMP ENDS '2020-12-31 23:59:59' DO INSERT INTO t_event(ts) VALUES (CURRENT_TIMESTAMP);
CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'string']
DO event_body;
34.3 查看计划事件
SHOW EVENTS [{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
mysql> show events\G*************************** 1. row ***************************
Db: hrdb
Name: event1 Definer: root@localhost
Time zone: SYSTEM Type: ONE TIME
Execute at: 2020-10-07 21:32:45
Interval value: NULL
Interval field: NULL
Starts: NULL
Ends: NULL
Status: DISABLED
Originator: 1character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci Database Collation: utf8mb4_0900_ai_ci*************************** 2. row ***************************
Db: hrdb
Name: event2 Definer: root@localhost
Time zone: SYSTEM Type: RECURRING Execute at: NULL
Interval value: 5
Interval field: MINUTE
Starts: 2020-10-07 21:35:07
Ends: 2020-12-31 23:59:59
Status: ENABLED
Originator: 1character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci Database Collation: utf8mb4_0900_ai_ci2 rows in set (0.03 sec)
mysql> show create event event1\G*************************** 1. row ***************************
Event: event1
sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
time_zone: SYSTEM Create Event: CREATE DEFINER=`root`@`localhost` EVENT `event1` ON SCHEDULE AT '2020-10-07 21:32:45' ON COMPLETION PRESERVE DISABLE DO INSERT INTO t_event(ts) VALUES (CURRENT_TIMESTAMP)character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci Database Collation: utf8mb4_0900_ai_ci1 row in set (0.00 sec)
34.4 修改计划事件
ALTER EVENT event_name [ON SCHEDULE schedule]
[ON COMPLETION [NOT] PRESERVE]
[RENAME TO new_event_name]
[ENABLE | DISABLE]
[COMMENT 'string']
[DO event_body]
ALTER EVENT event2RENAME TO repeat_eventCOMMENT 'This is a repeat event.';
34.5 删除计划事件
DROP EVENT [IF EXISTS] event_name
DROP EVENT IF EXISTS event1;