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 TIME,END 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;