事件[EVENT]

1.事件的基本概念:

事件和触发器相似,都是在某些事情发生的时候启动,因此事件也可称为临时触发器。其中,事件是基于特定时间周期触发来执行某些任务,而触发器是基于某个表所产生的事件触发的,它们的区别也在于此。

注意:在使用事件调度器之前必须保证mysql中EVENT_SCHEDULER已被开启。

2. 查看事件调度器(on表示开启,off表示未开启)

查看当前是否开启了event scheduler三种方法:

1) SHOW VARIABLES LIKE ‘event_scheduler’; #或:show VARIABLES LIKE '%sche%';

2) SELECT @@event_scheduler;
3) SHOW PROCESSLIST;(是否有State为:Waiting for next activation的进程,User为event_scheduler)#查看进程列表

 

Id: 进程号

   User:  用户

   Host:  主机名

     db:  相关数据库

Command:  指令要做什么

   Time:  执行时间

  State:  状态

   Info:  输入的指令

注:“Waiting for next activation” –是指等待下一次“进程”激活

如图所示:

 

注:在Mysql启动时如果在my.cnf设置了event_scheduler=ON(OFF or 1 or 0)时,就不能在运行时修改为DISABLED,如果设置event_scheduler=DISABLED时,就不能在运行时修改其值为ON ( OFF or 1 or 0)。

【修改配置文件】

windows下修改my.ini文件中加上 EVENT_SCHEDULER=1或 EVENT_SCHEDULER=ON来开启。

Linux 下修改my.cnf文件中加上 EVENT_SCHEDULER=1或 EVENT_SCHEDULER=ON来开启。

 

  方法一:mysql> Show variables like 'EVENT_SCHEDULER';

 

 

 

 

 方法二:SELECT @@EVENT_SCHEDULER;

 

 

 

 

 

3. 开启事件调度器

  方式一:SET GLOBAL EVENT_SCHEDULER=1;

 

方式二:SET GLOBAL EVENT_SCHEDULER=TRUE;

 

 

【应会部分】:

  1. 创建事件

   语法:CREATE EVENT 【IF NOT EXISTS】 事件名称 ON SCHEDULE 执行事件时间间隔【ENABLE|DISABLE|DISABLE ON SLAVE】

DO 事件内容

语法说明:执行事件事件间隔分别对应两种子句:

            AT timestamp【+INTERVAL interval】...|EVERY interval【START timestamp【+INTERVAL interval】...】【ENDS timestamp【+INTERVAL interval】...】

 

*1、AT子句:AT  timestamp 【+INTERVAL interval】,表示:在这个时间间隔后事件发生,用于指定事件在某时刻发生,其中timestamp为具体某一时间点

*2、EVERY子句:EVERY interval【START timestamp【+INTERVAL interval】...】【ENDS timestamp【+INTERVAL interval】...】

表示事件在指定时间区域内每隔多长时间发生一次,其中start 表示开始时间,ends表示结束时间

*interval语法格式

数值{YEAR/ /MONTH/DAY/HOUR/MINUTE/WEEK/SECOND/YEAR_MONTH/DAY_HOUR/DAY_MINUTE/DAY_SECONDE/HOUR_MINUTE/HOUR_SECOND/MINUTE_SECOND}

*事件内容有多个的时候可用begin.....end复合结构

*3、ENABLE|DISABLE|DISABLE ON SLAVE:表示事件的一种属性,

enable表示事件是活动的,活动意味着调度器检查事件动作事都必须调用

disable表示事件是关闭的,关闭意味着事件的声明存储到目录中,但调度器不会检查它是否应该被调用

disable on slave表示事件在从机关是关闭的

如果不指定任何选项,则一个事件创建完后,它立即变为活动的。

4、实例

 例1:创建一个事件,在当前数据库下,当前时间创建一个test表,包含字段name,date

use db_school

Create event if not exists event_create

on schedule at now()

Do create table test(name varchar(20),date varchar(20));

 

例2:创建一个事件从现在开始到2分钟后结束,每隔10s往test表中插入数据

create event event_insert on schedule

Every 10 second

Starts now()

Ends now() + interval 2 minute

Do insert into test values(‘’,now());

 

 

例3:创建一个一分钟后清空test数据表中的数据

create event evetn_delete on schedule

At now() + interval 1 minute

Do delete from test;

 

例4:在数据库db_school中创建一个事件,用于每个月向表tb_student中插入一条数据, create event if not exists event_insert

on schedule every 1month

starts curdate()+interval 1 month

Ends ‘2018-06-08’

Do

Begin

If year(curdate())<2020 then

Insert into tb_student values(null,’张晓勇’,’男’,’1977-12-11’,’山西’,’汉’,’AC1301’);

End if;

End$$

 

5、修改事件

语法: ALTER EVENT 事件名【ON SCHEDULER schedule】【RENAME TO  新事件名称】【ENABLE|DISABLE|DISABLE ON SLAVE】【DO 事件】

 

例5、临时关闭例2中创建的事件

alter event event_insert disable;

例6、修改例2中事件名称且再次开启

alter event event_insert rename to event_insert1 enable;

 

6、删除事件

语法:DROP EVENT【IF EXISTS】 事件名称

 

例7:删除事件event_insert1

drop event event_insert1;

 

 
posted @ 2020-04-13 16:26  _Jack_test  阅读(658)  评论(0编辑  收藏  举报