MySQL中的事件(Event)是一种与时间相关的数据库对象,可以用来调度执行SQL语句。它类似于操作系统的计划任务或cron作业,你可以定义一段SQL代码在特定的时间运行,或者按照某个时间间隔周期性地执行。
使用MySQL事件,你可以自动化例如数据清理、生成报告、数据归档等任务,而不需要外部的脚本或应用程序。
创建事件
你可以创建一个新的事件,指定它的执行频率以及要执行的SQL语句。例如:
CREATE EVENT my_event
ON SCHEDULE EVERY 1 WEEK STARTS '2023-01-01 00:00:00'
DO
DELETE FROM my_table WHERE created_at < NOW() - INTERVAL 1 MONTH;
上述代码创建了一个名为my_event
的事件,它会每周运行一次,从my_table
表中删除一个月前创建的记录。
查看和管理事件
可以通过以下语句查看当前存在的事件状态信息:
SHOW EVENTS;
以通过查询information_schema
数据库中的EVENTS
表来查看事件的执行情况:
SELECT * FROM information_schema.EVENTS;
其中LAST_ALTERED
, LAST_EXECUTED
和 STARTS
列来表示获取最后修改时间、最后执行时间以及事件计划开始执行的时间。
也可以修改、禁用或删除事件:
ALTER EVENT my_event DISABLE; DROP EVENT my_event;
事件调度器
MySQL中的event_scheduler
系统变量有三种可能的设置:ON
、OFF
和DISABLED
。其中:
ON
表示事件调度器是启动的,并会按计划执行事件。OFF
表示事件调度器当前是关闭的,但可以在运行时启用。DISABLED
表示事件调度器完全禁用,并且不能在运行时修改这个状态。这个设置只能在服务器启动时通过配置文件或启动参数进行设置。
如果在服务器启动时将事件调度器设置为DISABLED
,那么无论是命令行还是任何管理工具都无法在运行时启用事件调度器。如果需要改变这个状态,必须重新启动MySQL服务器并在启动时设置合适的值。
例如,在my.cnf
(Linux)或my.ini
(Windows)配置文件中,你可以这样设置:
[mysqld]
event_scheduler=OFF # 或者 ON, 但不应该设置为 DISABLED
如果event_scheduler
被设置为DISABLED
,你需要更改配置文件中的设置并重启MySQL服务来使其生效。如果设为ON
或OFF
,则可以在运行时使用SQL语句来控制:
SET GLOBAL event_scheduler = ON; -- 启动事件调度器
SET GLOBAL event_scheduler = OFF; -- 关闭事件调度器