MySQL事件调度器是5.1起内置的定时任务系统,由后台专用线程管理,支持秒级精度、基于服务器时区执行,需开启event_scheduler才能运行,与表操作无关,区别于触发器。

MySQL 事件调度器(Event Scheduler)是数据库内置的定时任务系统,从 5.1 版本起支持,本质是一个由 MySQL 后台管理的专用线程,用于在指定时间或按固定间隔自动执行 SQL 操作。
事件调度器的核心作用
它让数据库能“自己动起来”——无需依赖操作系统级的 cron 或 Windows 任务计划,直接在数据库层面完成周期性或一次性任务,比如:
- 每天凌晨清理过期日志表数据
- 每 30 秒刷新一次统计缓存视图
- 在特定时间点(如年底最后秒)插入一条业务标记记录
事件与触发器的关键区别
虽然都叫“自动执行”,但触发逻辑完全不同:
- 触发器(Trigger):响应 DML 操作(INSERT/UPDATE/DELETE),只要某张表被改了,就立刻触发
- 事件(Event):只看时间,和表操作无关;到点就跑,哪怕数据库此刻完全空闲
事件的时间精度与依赖
事件调度器支持秒级精度,最小可设为 EVERY 1 SECOND。但要注意:
- 所有时间计算基于 MySQL 服务器自身的时区(不是客户端时区),例如服务器设为 UTC,那么 AT '2025-12-31 00:00:00' 就是在 UTC 时间零点执行
- 事件是否能运行,首先取决于
event_scheduler系统变量是否为 ON;默认多数安装是 OFF
事件的基本生命周期管理
一个事件从创建到执行,需经历几个明确阶段:
-
启用调度器:执行
SET GLOBAL event_scheduler = ON,或在 my.cnf 中配置event_scheduler = ON(推荐后者,避免重启失效) -
创建事件:用
CREATE EVENT语句定义时间计划(ON SCHEDULE)和要执行的动作(DO 后面的 SQL) -
查看与调试:用
SHOW EVENTS查列表,SHOW CREATE EVENT xxx看定义,SHOW PROCESSLIST可见 event_scheduler 进程 -
启停控制:用
ALTER EVENT xxx ENABLE/DISABLE控制开关,不影响事件定义本身










