美文网首页
mysql 事件调度event_scheduler

mysql 事件调度event_scheduler

作者: 尹楷楷 | 来源:发表于2020-05-02 23:57 被阅读0次

mysql自身提供了定时调度的功能

开启关闭

MySQL事件调度器event_scheduler负责调用事件,它默认是关闭的。这个调度器不断地监视一个事件是否要调用, 要创建事件,必须打开调度器。
查看调度器开启状态

 show variables like '%event_scheduler%'; 

开启事件调度器,通过命令行,可通过如下任何一个命令行

SET GLOBAL event_scheduler = ON; 
SET @@global.event_scheduler = ON; 
SET GLOBAL event_scheduler = 1; 
SET @@global.event_scheduler = 1;

通过配置文件my.cnf

[mysqld]
event_scheduler = 1 #或者ON 

查看调度器线程,可以看到event_scheduler是一个Daemon守护线程

 show processlist; 
image.png

创建语法

1、schedule:时间调度,用于指定事件何时发生或者多久发生一次,分别对应下面两个字句
①AT字句:用于指定事件在某个时刻发生。其中,timestamp表示一个具体的时间点,后面可以加一个时间间隔,表示在这个时间间隔后事件发生;interval表示这个时间间隔,由一个数值和单位构成;quantity是间隔时间的数值
②EVERY字句:用于表示事件在指定时间区间每隔多长时间发生一次。其中,STARTS子句用于指定开始时间,ENDS子句用于指定结束时间

2、ON COMPLETION [NOT] PRESERVE :表示当事件不会再发生的情况下,删除事件(注意特定时间执行的事件,如果设置了该参数,执行完毕后,事件将被删除,不想删除的话可以设置成ON COMPLETION PRESERVE);

3、ENABLE:表示系统将执行这个事件;DISENABLE:不执行这个事件

4、指定事件启动时所要求执行的代码。如果包含多条语句,可以使用BEGIN…END复合结构

创建事件实例

创建一张表进行测试

CREATE TABLE events_list ( event_name VARCHAR ( 20 ) NOT NULL, event_started TIMESTAMP NOT NULL );

1、立即执行的事件

create event event_now 
on schedule 
at now() 
do insert into events_list values('event_now', now()); 

2、每秒钟执行

CREATE event event_second
ON SCHEDULE 
EVERY 1 SECOND
DO insert into events_list values('event_second', now()); 

2、每分钟执行

create event test.event_minute 
on schedule 
every 1 minute  
do insert into events_list values('event_minute', now()); 

开启和关闭事件

1、关闭事件

ALTER EVENT event_name ON COMPLETION PRESERVE DISABLE;  

2、开启事件

ALTER EVENT event_name ON  COMPLETION PRESERVE ENABLE;

查看存在的事件

查看当前所在库的事件

SHOW EVENTS;

查看所有事件

SELECT * FROM mysql.EVENT;

1、默认创建事件存储在当前库中,也可显示指定事件创建在哪个库中通过show events只能查看当前库中创建的事件事件执行完即释放,如立即执行事件,执行完后,事件便自动删除,多次调用事件或等待执行事件可以查看到;
2、如果两个事件需要在同一时刻调用,mysql会确定调用他们的顺序,如果要指定顺序,需要确保一个事件至少在另一个事件1秒后执行;
3、对于递归调度的事件,结束日期不能在开始日期之前。
select可以包含在一个事件中,然而他的结果消失了,就好像没执行过。

相关文章

网友评论

      本文标题:mysql 事件调度event_scheduler

      本文链接:https://www.haomeiwen.com/subject/xevnwhtx.html