MySQL新学知识(三)MySQL 事件(EVENT)
前言
👨💻👨🌾📝记录学习成果,以便温故而知新
在Navicat上看到事件(EVENT)已经是很久以前了,但是使用事件还是最近的事,现在把一些学习所得记录一下。
所谓事件其实就事MySQL的定时任务。
一、创建事件
MySQL文档创建事件https://dev.mysql.com/doc/refman/8.4/en/create-event.html
语法如下:
CREATE
DEFINER = user
EVENT
IF NOT EXISTS
event_name
ON SCHEDULE schedule
ON COMPLETION \[NOT\] PRESERVE
ENABLE \| DISABLE \| DISABLE ON {REPLICA \| SLAVE}
COMMENT 'string'
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}
语法看起来有点抽象,图形界面看起来比较直观一点。下图是Navicat创建事件的定义页,图中红字是语法中对应的。其中的event_body即事件体,也就是定时任务执行的内容需要注意,如果有多条语句需要执行,用BEGIN与END关键字括起来。

下图在Navicat中是计划页,对应语法中的"ON SCHEDULE",而schedule及计划有份AT与EVERY两种模式,即单次执行与循环执行

语法中的COMMENT对应的是注释页,文档中说注释64字符
二、启用事件
事件默认是不启用的,执行如下语句启用事件:
sql
SET GLOBAL event_scheduler = ON;
启用后执行
sql
SHOW PROCESSLIST;
如下图出现User为event_scheduler的行,说明启用成功。

执行如下语句停用事件:
sql
SET GLOBAL event_scheduler = OFF;
执行后User为event_scheduler的行消失。
三、一个示例
sql
CREATE DEFINER=`root`@`localhost` EVENT `EVENT_TEST` ON SCHEDULE EVERY 2 MINUTE STARTS '2026-10-18 15:13:50' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
DECLARE v INTEGER;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END;
SET v = 0;
WHILE v < 5 DO
INSERT INTO t1(num) VALUES (0);
UPDATE t2 SET s1 = s1 + 1;
SET v = v + 1;
END WHILE;
END
Navicat对比


执行一次后效果:
表t1

表t2

执行第二次后结果:
表t1

表t2

看起来是实现预期。
MySQL的事件即定时任务还是有一定的便利性的。