事件[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;
【应会部分】:
- 创建事件
语法: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;