跳到主要内容

EVENT

事件(EVENT)是一种预定义的 SQL 任务,可以在特定的时间点或按照指定的时间间隔自动执行。每个事件都由触发条件(即调度计划)、执行的 SQL 语句或存储过程组成。事件的定义存储在数据库中,与数据库一同维护,确保了即使服务器重启,事件也能按计划执行。

和触发器不同,触发器基于数据操作触发 SQL 执行,EVENT 基于时间变化触发 SQL 执行,它允许用户根据预设的时间计划自动执行 SQL 语句或存储过程。这一特性极大地增强了数据库的自动化处理能力,适合于定期数据维护、统计汇总、定时通知等多种场景。

信息

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

功能特性

  • 调度规则:

    • 精确时间点:可以设置事件在某个确切的时间点执行一次。
    • 周期性执行:支持按秒、分钟、小时、天、月等周期重复执行。
    • 复杂调度:通过组合使用 EVERYSTARTSENDS 等关键字,实现复杂的调度逻辑,如仅在工作日执行、在特定日期区间内执行等。
  • SQL 支持:

    • 可以执行任何合法的 SQL 语句,包括数据插入、更新、删除。
    • 支持事务处理,保证事件执行的原子性和一致性。
  • 动态控制:

    • 可以在运行时动态开启或关闭事件调度器,无需重启服务。
    • 支持修改、删除现有事件,适应业务需求变化。

权限要求

使用 EVENT 必须要有 GRANT EVENT 权限。有关 seekdb 权限的详细介绍,参见 seekdb 下的权限分类

启停 EVENT

事件由一个特殊的事件调度程序线程执行,您可以通过如下方式开启/关闭事件调度器。

  • 开启事件调度器:

    SET GLOBAL event_scheduler = ON;
  • 关闭事件调度器:

    SET GLOBAL event_scheduler = OFF;

使用说明与注意事项

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