4.10 事件(event)
事件和触发器类似,都是在某些事情发生的时候启动,事件是根据调度事件来启动的,事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的crontab或Windows下的任务计划)只能精确到每分钟执行一次。
4.10.1 事件配置
如果事件调度程序状态未设置为禁用,则可以在ON和OFF之间切换Event_Scheduler(使用set)。设置此变量时,也可以使用0表示关闭,使用1表示打开。
SHOW VARIABLES LIKE '%event_sche%'
4.10.2 事件创建
以下语句创建并调度新事件,除非启用事件计划程序,否则事件不会运行,有效创建事件语句的最低要求如下:
① 关键字CREATE EVENT加上一个事件名称,该名称唯一标识数据库架构中的事件。
② 一个ON SCHEDULE子句,用于确定事件执行的时间和频率。
③DO子句,包含要由事件执行的SQL语句。
1CREATE2 [DEFINER = user]3 EVENT4 [IF NOT EXISTS]5 event_name6 ON SCHEDULE schedule7 [ON COMPLETION [NOT] PRESERVE]8 [ENABLE | DISABLE | DISABLE ON SLAVE]9 [COMMENT 'string']10 DO event_body;1112schedule: {13 AT timestamp [+ INTERVAL interval] ...14 | EVERY interval15 [STARTS timestamp [+ INTERVAL interval] ...]16 [ENDS timestamp [+ INTERVAL interval] ...]17}1819interval:20 quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |21 WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |22 DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}2324案例:以下为简单创建事件语句的示例:25CREATE EVENT myevent26 ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR27 DO28 UPDATE myschema.mytable SET mycol = mycol + 1;2930说明:311)DEFINER子句指定在事件执行时检查访问权限时使用的MySQL帐户;322)如果event_name中未指定任何模式,则假定默认(当前)模式;333)ON SCHEDULE子句确定为事件定义的event_body重复的时间、频率和持续时间;344)AT时间戳用于一次性事件。它指定事件仅在时间戳指定的日期和时间执行一次,时间戳必须包括日期和时间,或者必须是解析为日期时间值的表达式,EVERY表示一定频率;
4.10.3 事件操作
1) 临时关闭事件
ALTER EVENT e_test DISABLE;
2)开启事件
ALTER EVENT e_test ENABLE;
3)删除事件(DROP EVENT)
DROP EVENT [IF EXISTS] event_name;