1,首先,需要确保MySQL的事件调度器是启用的。可以通过以下命令检查:
SHOW VARIABLES LIKE '%event_scheduler%';
2,如果event_scheduler的值为ON,则调度器已启用。如果它的值为OFF,则可以通过以下命令启用它:
SET GLOBAL event_scheduler = ON;
关闭EVENT事件功能可以使用以下命令:
SET GLOBAL event_scheduler = OFF;
3, 查看已有EVENT事件:
show events;
4,创建一个定时任务.
创建事件语法:
CREATE EVENT [IF NOT EXISTS] event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE]
[COMMENT 'comment']
DO sql_statement;
参数详细说明:
参数 | 解释 |
---|---|
IF NOT EXISTS | 这个是判断是否存在相同的Event名称,如果不存在才创建 |
event_name | 事件名称 |
schedule | 调度策略,用于定义这个事件何时触发,是单次调度还是多次调度 |
ON COMPLETION PRESERVE | 是指当本次事件调度执行完成后,会保留该事件。如果您不配置,则默认是ON COMPLETION NOT PRESERVE ,表示执行完成后自动删除该事件。如果是周期性调度的话,需要配置成该类型 |
ON COMPLETION NOT PRESERVE | 本次调度执行完成后自动删除该事件 |
ENABLE \ DISABLE \ DISABLE ON SLAVE | 用于指定事件状态,ENABLE表示该事件是启动状态,DISABLE 表示未启动,DISABLE ON SLAVE表示对于从数据库则不启动该事件。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它默认是ENABLE状态 |
SQL_STATEMENT | 用于指定事件启动时所要执行的代码。可以是任何有效的sql语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN…END复合结构 |
调度策略配置语法:
调度策略有两种方式,单次和周期性循环执行。
单次执行的关键字AT,后面可以接指定的执行时间字符串,比如 AT TIMESTAMP ‘2024-3-20 10:14:00’ 表示在2024年3月20号早上10点14分整执行一次任务。
周期性执行的关键字EVERY,比如EVERY 10 SECOND则表示每隔10秒执行一次任务。时间单位除了SECOND,还有 YEAR、QUARTER、MONTH、DAY、HOUR、MINUTE、WEEK、SECOND、YEAR_MONTH、DAY_HOUR、DAY_MINUTE 、DAY_SECOND、HOUR_MINUTE、HOUR_SECOND等等。
5, 停止/开启定时任务
#停止定时任务
ALTER EVENT event_name DISABLE;
#开启定时任务
ALTER EVENT event_name ENABLE;