事件计划是mysql中的对象,其中的sql语句会由通过特定时间段来触发。按照官方文档上的说明,这个概念与'时间触发器(temperal trigger)'是有区别的。从根本上来讲evnet scheduler是对特定时间段的响应,而trigger是对特定表上发生的特定事件的响应。
事件计划在sql标准中并无定义,可是在其余数据库中能够看到相似的概念。mysql中的事件有一下一些主要的特征:
1. mysql中的事件由名称和其所处的数据库惟一肯定
2. mysql中的事件是按照时间表运行的动做。动做的定义若是有须要能够使用复合语句begin...end。事件的时间能够是一次性的,也能够是周期性的。周期性的事件能够定义开始日期时间,结束日期时间。默认的程序从建立完成开始周期性运行,不会自动结束,直到该程序被禁用或者删除。若是在一个周期内程序没有正常运行结束,会在同一时间有几个程序实例运行。
3. 用户能用sql语句建立,修改和删除事件,事件中如有语法问题,mysql会报错。
4. 事件的性质能够用sql语句来设置和修改,这些性质包括:事件名,时间, 过时后是否保留, 状态, 执行的动做, 所在数据库。(alter event)
5. 事件动做能够包含存储过程,函数,触发器中的大部分语句。mysql
1 建立sql
CREATE [DEFINER = { user | CURRENT_USER }] EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] 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}
示例:数据库
## 建立一次性计划 REATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO UPDATE myschema.mytable SET mycol = mycol + 1; ## 周期性计划 CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions;
2 修改session
ALTER [DEFINER = { user | CURRENT_USER }] EVENT event_name [ON SCHEDULE schedule] [ON COMPLETION [NOT] PRESERVE] [RENAME TO new_event_name] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] [DO event_body]
3 删除函数
DROP EVENT [IF EXISTS] event_name