mysql event 应用在系统管理或者数据库管理中,需要经常周期性的执行某一个命令或者SQL语句的情况。
查看是否开启
mysql> SHOW VARIABLES LIKE '%sche%';
设置开启
mysql>SET GLOBAL event_scheduler = ON;
事件调度器event_scheduler的语法:
a. 事件调度器event_scheduler的语法主要包括创建,修改,删除,新建一个event后,如果还未删除,我们可以在mysql的information_schema下的EVENTS表中查到该event。
创建event(CREATE EVENT) 语法:CREATE EVENT [IF NOT EXISTS] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'comment'] DO sql_statement; 说明:event_name :创建的event名字(唯一确定的); ON SCHEDULE:计划任务 schedule: 决定event的执行时间和频率(注意时间一定要是将来的时间,过去的时间会出错),有两种形式 AT和EVERY 语法:AT timestamp [+ INTERVAL interval] | EVERY interval [STARTS timestamp] [ENDS timestamp] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}(具体说明请参考手册); [ON COMPLETION [NOT] PRESERVE]: 可选项,默认是ON COMPLETION NOT PRESERVE 即计划任务执行完毕后自动drop该事件;ON COMPLETION PRESERVE则不会drop掉 ; [COMMENT 'comment'] :可选项,comment 用来描述event;相当注释,最大长度64个字节 [ENABLE | DISABLE] :设定event的状态,默认ENABLE:表示系统尝试执行这个事件, DISABLE:关闭该事情,可以用alter修改 DO sql_statement: 需要执行的sql语句(可以是复合语句); 例子: CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions; (每隔一小时删除session表)
注意使用复用语句的时候记得使用分隔符;而且sql语句是由限制,这种限制跟函数fuction和触发器 trigger中的sql语句限制是一样的,具体是指:LOCK TABLES; UNLOCK TABLES;CREATE EVENT(#bug 18896);ALTER EVENT(#bug 18896);LOAD DATA;CREATE EVENT 是不可预处理的;CREATE EVENT在存储过程中使用时合法的;CREATE EVENT不可以再嵌入式的embedded mysql数据中使用。
b. 修改event(ALTER EVENT)
语法:ALTER EVENT event_name [ON SCHEDULE schedule] [RENAME TO new_event_name] [ON COMPLETION [NOT] PRESERVE] [COMMENT 'comment'] [ENABLE | DISABLE] [DO sql_statement] 说明:语句中的ON SCHEDULE, ON COMPLETION, COMMENT, ENABLE / DISABLE, and DO 与CREATE EVENT中的完全一致 例子: 先创建一个event: CREATE EVENT myevent ON SCHEDULE EVERY 6 HOUR COMMENT 'A sample comment.' DO UPDATE myschema.mytable SET mycol = mycol + 1; 修改1: ALTER EVENT myevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + 4 HOUR; (将原来的6小时执行一次,修改成4小时后每12小时执行一次) 修改2: ALTER EVENT myevent DISABLE; (将默认的ENABLE修改为 DISABLE)
注意:修改event仅仅对已经存在的event起作用
c. 删除event
DROP EVENT [IF EXISTS] event_name
评论 (0)