事件
https://www.cnblogs.com/zoro-zero/p/6511203.html
打开事件调度器才能执行事件
創建
可以通过’? create event’命令查看创建触发器的格式。
CREATE EVENT [IF NOT EXISTS] event_name #不存在就创建
ON SCHEDULE 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] …]
# EVERY 间隔多久
[开始时间 [+ 时间间隔]]
[结束时间 [+ 时间间隔]]
例如:对于以下表,创建一个事件,每隔6秒钟自动插入一条数据。
①创建事件测试表
create table event_table
(
id int primary key auto_increment,
insert_time datetime
)engine innodb default charset utf8;
select * from event_table; # 查看表中数据
②创建一个事件,每隔6秒自动插入一条数据
create event insert_event
on schedule every 6 second
do
insert into event_table values(null,now());
#这里只有一条语句可以不用begin end;
select * from event_table; # 查看表中数据
查看所有事件的状态
show events;
事件调度器
事件是由事件调度器管理的,所以需要打开事件调度器才能执行事件。
1、查看事件调度器的状态 #事件调度器状态是一个会话变量
show variables like ‘%SCHEDULE%’;
2、设置事件调度器的的状态 # 通过会话变量打开或关闭
set global event_scheduler = on; # 或者=1,打开调度器
set global event_scheduler = off; # 或者=0,关闭调度器
3、查看进程列表
事件调度器开启后是有由一个进程来执行的
show processlist; # 查看进程列表
每隔一分钟清空表数据
create event truncate_event
on schedule
every 1 minute
do
truncate table event_table;
# 这里使用truncate清空表数据
当然也可以用delete from event_table;
但是使用truncate清空表数据效率要快一些。
# 数据库中的时间单位有:year年、month月、day日、week星期、hour小时、minute分钟、second秒钟、microsecond微秒。
单独开启/禁用某个事件
开启和关闭事件调度器会使所有的事件都同时开启或关闭,那如何对单个事件进行开启或关闭呢?
1、单独禁用某个事件
alter event insert_event disable;
2、单独开启某个事件
alter event insert_event enable;
# 事件调度器像是一个总开关
而每个单独的事件都有一个自己独立的开关
创建一个清空表事件,7天之后开启事件,每天清空表,一个月后停止并删除事件。
create event clear1_event
on schedule
every 1 day # 每隔1天
start current_timestamp + interval 7 day # 7天后开启
ends current_timestamp + interval 1 month # 1月后停止
on completion not preserve # 停止后不保留事件
do
truncate table event_table;
创建一个清空表事件,固定时间点清空表数据
create event clear2_event
on schedule
at '2019-11-2 22:40:0' + interval 3 day # 固定时间点
do # 可用interval关键字加上间隔时间
truncate table event_table;