事件
事件的基本概念
与触发器类似,都是在特定的条件执行相应的操作,但是不同的是,触发器是触发时执行任务,而事件是定时执行任务的。
事件关键字:event
基本作用:让数据库定时执行某些操作。
#事件的创建
-
格式
#if not exists不存在就创建 create event [if not exists] 事件名称 ON schedule #计划任务 (定时操作:AT timestamp 时间点,EVERY interval 间隔多久) [ON COMPLETION [NOT] PRESERVE] # 事件到期处理 (事件执行完之后默认保留,加一个NOT为删除) [ENABLE | DISABLE | DISABLE ON SLAVE] #事件的状态 (开启 | 关闭) #相当于你设置的闹钟是打开还是关闭的 [COMMENT 'string'] # 这是注释,不用管 DO event_body; # 执行的操作 schedule: # 任务计划参数解析 AT timestamp [+ INTERVAL interval] ... # AT 时间点 [+ 时间间隔] (如:AT 2020-6-6 8:30:10,2020年6月6号8点30分10秒) | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...]
-
例子(格式中很多都有默认值可不写)
create event insert_event on schedule every 6 second do begin insert into '表名' values(null,now()); end
查看事件
-
查看所有事件的状态
show events;
事件调度器
事件是由事件调度器管理的,所以需要打开事件调度器才能执行事件。
-
查看事件调度器的状态 #事件调度器状态是一个会话变量
show variables like '%SCHEDULE%';
-
设置事件调度器的的状态 # 通过会话变量打开或关闭
set global event_scheduler = on; # 或者=1,打开调度器 set global event_scheduler = off; # 或者=0,关闭调度器
-
查看进程列表
事件调度器开启后是有由一个进程来执行的show processlist; # 查看进程列表
时间单位
数据库中的时间单位有:year年、month月、day日、week星期、hour小时、minute分钟、second秒钟、microsecond微秒.
单独开启/禁用某个事件
开启和关闭事件调度器会使所有的事件都同时开启或关闭,那如何对单个事件进行开启或关闭呢?
-
单独禁用某个事件
alter event 事件名称 disable;
-
单独开启某个事件
alter event 事件名称 enable;
事件调度器像是一个所有事件的总开关,而每个单独的事件都有一个自己独立的开关。
小例子
- 创建一个清空表事件,7天之后开启事件,每天清空表,一个月后停止并删除事件。
create event clear1_event on schedule every 1 day # 每隔1天 starts now() + interval 7 day # 7天后开启 ends now() + interval 1 month # 1月后停止 on completion not preserve # 停止后不保留事件 do truncate table event_table;