EVENT
事件(EVENT)是一种预定义的 SQL 任务,可以在特定的时间点或按照指定的时间间隔自动执行。每个事件都由触发条件(即调度计划)、执行的 SQL 语句或存储过程组成。事件的定义存储在数据库中,与数据库一同维护,确保了即使服务器重启,事件也能按计划执行。
和触发器不同,触发器基于数据操作触发 SQL 执行,EVENT 基于时间变化触发 SQL 执行,它允许用户根据预设的时间计划自动执行 SQL 语句或存储过程。这一特性极大地增强了数据库的自动化处理能力,适合于定期数据维护、统计汇总、定时通知等多种场景。
信息
seekdb EVENT 支持执行 call 语句调用存储过程,设置开始时间或结束时间时支持了时间表达式和函数。
功能特性:
-
调度规则:
- 精确时间点:可以设置事件在某个确切的时间点执行一次。
- 周期性执行:支持按秒、分钟、小时、天、月等周期重复执行。
- 复杂调度:通过组合使用
EVERY、STARTS、ENDS等关键字,实现复杂的调度逻辑,如仅在工作日执行、在特定日期区间内执行等。
-
SQL 支持:
- 可以执行任何合法的 SQL 语句,包括数据插入、更新、删除。
- 支持事务处理,保证事件执行的原子性和一致性。
-
动态控制:
- 可以在运行时动态开启或关闭事件调度器,无需重启服务。
- 支持修改、删除现有事件,适应业务需求变化。
权限要求
使用 EVENT 必须要有 GRANT EVENT 权限。有关 seekdb 权限的详细介绍,参见 seekdb 下的权限分类。
启停 EVENT
事件由一个特殊的事件调度程序线程执行,您可以通过如下方式开启/关闭事件调度器。
-
开启事件调度器:
SET GLOBAL event_scheduler = ON; -
关闭事件调度器:
SET GLOBAL event_scheduler = OFF;
使用说明与注意事项
EVERY interval不设置START TIME,END TIME会无限执行。- 对于重复 EVENT, 如果 EVENT 执行时间大于调度间隔,会出现同一时间多个 EVENT,需要用户自己保证执行时间小于调度间隔。
- 不能设置最大执行时间(一次性 EVENT 的最大执行时间 24 小时)。
- 不建议通过一个 EVENT 创建另一个 EVENT。
- 已经开始的 EVENT 不允许再修改调度计划。
- 已经开始的 EVENT 不应该再修改
event_name,否则可能导致无法正确结束。 - 如果该 EVENT 连续执行失败 16 次就会停止运行。