MySQL新学知识(三)MySQL 事件(EVENT)

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的事件即定时任务还是有一定的便利性的。

相关推荐
Warolitbos1 小时前
【数据库】SQL进阶15题,窗口函数/索引/事务一页速查
数据库·sql·学习·mysql·面试
BioRunYiXue1 小时前
使用docker分析高通量测序数据
java·数据库·人工智能·spring cloud·docker·tomcat·html
卓豪终端管理2 小时前
300 台终端补丁推送完成 ≠ 漏洞关闭:补丁稽核闭环的状态机与工程落点
网络·数据库·php
l1t2 小时前
DeepSeek总结的PostgreSQL 中的二进制只读副本,第三部分
数据库·postgresql
从零数据分析2 小时前
零基础学SQL 23:和上月比总对不上?LAG/LEAD 一步取出上一次(附 4 个模板)
java·数据库·sql·mysql·oracle·sqlite·database
码士集团小青2 小时前
Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
数据库·redis·缓存
太理摆烂哥2 小时前
MySQL的查询
数据库·mysql
码士集团小青2 小时前
硬核 | Redis 布隆(Bloom Filter)过滤器原理与实战
数据库·redis·缓存
钱栈up3 小时前
配料秤料位查出来是负数——IoTDB存的是周期增量,我却在拿首尾相减
前端·数据库