标签:
作业也叫做事件调度,其实它也就是一个时间触发器;它可以定义某个时间点执行指定的数据库命令操作。
语法
CREATE [DEFINER = { user | CURRENT_USER }] ######定义创建人,默认创建事件的用户就是事件的定义人,必须具备super权限才能指定其他用户。 EVENT ######创建事件 [IF NOT EXISTS] ######删除并判断是否有存在重名的作业 event_name ######作业名 ON SCHEDULE schedule ######ON SCHEDULE是固定语法,schedule定义执行的时间 [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE | DISABLE ON SLAVE] ######启用或者禁用或者在从库上禁用 [COMMENT ‘comment‘] ######备注 DO ######规定语法
event_body; ######操作命令 schedule: AT timestamp [+ INTERVAL interval] ... ####定义执行的时间,命令在指定的时间执行一次,INTERVAL是在AT timestamp的基础上执行类似DATE_ADD()命令,在指定的时间基础上加上一个时间,其中interval参数有很多具体的时间单位具体参考下面 | EVERY interval ####EVERY是重复执行的命令和AT是冲突的 [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}
注意:AT和EVERY是互斥的操作;AT:只在规定的时间执行一次,EVERY:重复执行。
组合的时间格式只有“年月日时分秒”之间的组合方式,没有week的组合方式
由于Mysql语法非常的灵活,所以它支持很多的时间格式,类似如下:
1.在指定的时间基础上加上2分10秒 AT ‘2016-06-01 22:00:00‘ + INTERVAL ‘2:10‘ MINUTE_SECOND 等同于
AT ‘2016-06-01 22:00:00‘ + INTERVAL 2 MINUTE + INTERVAL 10 SECOND 2.在当前的时间基础上加上3星期2天 AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY
3.指定开始和结束时间,从当前时间加30分钟开始至当前时间加4个星期结束每12个小时执行一次命令EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK
注意:EVERY不支持“+ INTERVAL”格式,例如“+ INTERVAL 2 MINUTE + INTERVAL 10 SECOND”只能用 “ ‘2:10’ MINUTE_SECOND”代替
查看作业功能否启用
show global variables like ‘%event_scheduler%‘; select @@event_scheduler;
如果没有启用需要修改my.cnf,加入
event_scheduler=1
创建作业
1.在指定的时间点执行命令
CREATE EVENT testevent
ON SCHEDULE AT ‘2016-06-27 22:00:00‘
COMMENT ‘AT TIME ‘2016-06-27 22:00:00‘ EXEC INSERT Tevent‘
DO INSERT INTO study.Tevent() VALUES(NOW());
2.也支持delimiter定义结束符
delimiter | CREATE EVENT e_daily ON SCHEDULE EVERY 1 DAY COMMENT ‘Saves total number of sessions then clears the table each day‘ DO BEGIN INSERT INTO site_activity.totals (time, total); SELECT CURRENT_TIMESTAMP, COUNT(*) FROM site_activity.sessions; DELETE FROM site_activity.sessions; END | delimiter ;
3.循环
delimiter | CREATE EVENT e ON SCHEDULE EVERY 5 SECOND DO BEGIN DECLARE v INTEGER; DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; SET v = 0; WHILE v < 5 DO INSERT INTO t1 VALUES (0); UPDATE t2 SET s1 = s1 + 1; SET v = v + 1; END WHILE; END | delimiter ;
4.定义开始和结束时间
CREATE EVENT testevent ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK DO INSERT INTO study.Tevent() VALUES(NOW());
查看数据库中创建的作业
select * from information_schema.events;
启用禁用作业
1.启用 ALTER EVENT schema.event_name ENABLE 2.禁用 ALTER EVENT schema.event_name DISABLE
删除作业
drop event schema.eventname
官方文档:http://dev.mysql.com/doc/refman/5.6/en/create-event.html
DO后面的支持通用的Mysql语法操作;所有可以可以执行单个命令、可以执行命令串、也可以类型函数和存储过程执行循环语句、还可以直接调用存储过程等。
注意:每个作业都有它所属的数据库,作业是属于具体的某个数据库的。
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。 《欢迎交流讨论》 |
标签:
原文地址:http://www.cnblogs.com/chenmh/p/5614561.html