跳到主要内容

CREATE EVENT

描述

该语句用于创建并安排新事件。

信息

seekdb 中 EVENT 支持执行 call 语句调用存储过程,设置开始时间或结束时间时支持了时间表达式和函数。

提示

EVENT 默认不开启,需要您执行 SET GLOBAL event_scheduler = 1; 命令开启。更多关于该配置项的介绍请参考event_scheduler

权限要求

执行该语句的用户需要拥有 CREATE 权限。有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类

语法

CREATE
[DEFINER = user]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON SLAVE] //默认创建完 ENABLE
[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}

使用说明与注意事项

  • EVERY interval 不设置 START TIMEEND TIME 会无限执行。
  • 对于重复 EVENT, 如果 EVENT 执行时间大于调度间隔,会出现同一时间多个 EVENT,需要用户自己保证执行时间小于调度间隔。
  • 不能设置最大执行时间(一次性 EVENT 的最大执行时间 24 小时)。
  • 不建议通过一个 EVENT 创建另一个 EVENT。
  • 已经开始的 EVENT 不允许再修改调度计划。
  • 已经开始的 EVENT 不应该再修改 event_name,否则可能导致无法正确结束。
  • 如果该 EVENT 连续执行失败 16 次就会停止运行。

参数说明

参数描述
IF NOT EXISTS用于指示如果事件已经存在,则不进行创建。创建事件时,如果事件存在且没有指定 IF NOT EXISTS,则会报错。
event_name指定待创建事件的名称。
DEFINER可选参数,指定执行事件的用户。目前不支持自定义 user,默认为当前 user。
ON SCHEDULE schedule定义事件执行的时间和频率。支持时间戳 + INTERVAL,如 “2020-12-01 00:00:00” + INTERVAL 1 DAY 时间必须为整数,时间单位支持 YEAR,MONTH,DAY,HOUR,MINUTE,SECOND。
ON COMPLETION [NOT] PRESERVE定义当事件完成执行后是否保留事件。默认不保留(NOT PRESERVE),即事件执行完毕后自动删除。
ENABLE、DISABLE、DISABLE ON SLAVE定义事件的状态。默认创建完 ENABLE,表示创建事件后立即启用。DISABLE 创建事件后禁用,事件不会自动执行直到被手动启用。DISABLE ON SLAVE 仅在复制的环境下使用,事件在服务器上不会执行。
COMMENT 'string'可选参数,为事件添加注释。
DO event_body定义要执行的 SQL 语句。目前支持单条 SQL 语句,BEGIN END 多条 SQL 语句。

示例

CREATE EVENT myevent
ON SCHEDULE AT '2024-07-01 00:00:00' + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;