一、基本概念
事件调度器有时也可称为临时触发器(temporal triggers),因为事件调度器是基于特定时间周期触发来执行某些任务,而触发器(Triggers)是基于某个表所产生的事件触发的,区别也就在这里。
二、使用范围
对于每隔一段时间就有固定需求的操作,如创建表,删除数据等操作,可以使用event来处理。
三、使用权限
单独使用event调用SQL语句时,查看和创建需要用户具有event权限,调用该SQL语句时,需要用户具有执行该SQL的权限。Event权限的设置保存在mysql.user表和mysql.db表的Event_priv字段中。
当event和procedure配合使用的时候,查看和创建存储过程需要用户具有create routine权限,调用存储过程执行时需要使用excute权限,存储过程调用具体的SQL语句时,需要用户具有执行该SQL的权限。
查看EVENT的方法 :
SHOW EVENTS;
四、基本语法
要使event起作用,MySQL的常量GLOBAL event_scheduler必须为on或者是1;
-- 查看是否开启定时器
SHOW VARIABLES LIKE 'event_scheduler';
-- 开启定时器 0:off 1:on
SET GLOBAL event_scheduler = 1;
当你设定的时间计划为 0 或者 OFF 时, 即关闭时间进程,不会有新的事件执行,但现有的正在运行的计划事件会执行到完毕
对于线上环境来说,使用EVENT时, 注意 -- 要从主库上开启定时器,从主库上关闭数据库,event触发所有操作均会记录binlog进行主从同步,从库上开启定时器很可能造成卡库。切换主库后之后记得将新主库上的定时器打开。
创建事件
CREATE EVENTS 的语法如下:
CREATE EVENT
[IF NOT EXISTS] ---------------------------------------------*标注1
event_name -----------------------------------------------------*标注2
ON SCHEDULE schedule ------------------------------------*标注3
[ON COMPLETION [NOT] PRESERVE] -----------------*标注4
[ENABL