转载自:https://www.cnblogs.com/qlqwjy/p/7954175.html
简介
- 事件取代了原先只能由操作系统的计划任务来执行的工作,而且MySQL的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务(如:Linux下的CRON或Windows下的任务计划)只能精确到每分钟执行一次。
- 默认创建事件存储在当前库中,也可显示指定事件创建在哪个库中
开启关闭事件调度器
查询事件调度器开闭状态
show variables like '%event_scheduler%';
开启事件调度器
SET GLOBAL event_scheduler = ON;
关闭事件调度器
SET GLOBAL event_scheduler = OFF;
查询当前库中事件
mysql> show events;
查询所有库中事件
mysql> select * from mysql.event;
创建事件
一条create event语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(event schedule),表示事件何时启动以及按什么频率启动,第二部分是事件动作(event action ),这是事件启动时执行的代码
CREATE
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE]
[COMMENT 'comment']
DO event_body;
schedule:
AT timestamp [+ INTERVAL interval] ...
| EVERY interval
[STARTS timestamp [+ INTERVAL interval] ...]
[ENDS timestamp [+ INTERVAL interval] ...]
interval:
quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
示例-创建一个表记录每次事件调度的名字和时间戳
创建记录表
mysql> drop table if exists events_list;
mysql> create table events_list(event_name varchar(20) not null, event_started timestamp not null);
创建事件
create event event_now
on schedule
at now()
do insert into events_list values('event_now', now());
查询记录表
mysql> select * from events_list;
修改事件
修改执行频率
alter event test.event_minute
on schedule
every 30 second
do insert into events_list values('event_now', now());
修改事件名字
alter event test.event_minute
rename to test.event_second;
修改事件活动/不活动
alter event test.event_second disable;
alter event test.event_second enable;
删除事件
DROP EVENT [IF EXISTS] event_name
示例-删除一年前的黑名单
定义存储过程
delimiter //
CREATE PROCEDURE clearEmploutBlack()
BEGIN
delete from blacklist where temporaryInStatus='0' and employeeStatus='1' and TIMESTAMPDIFF(YEAR,time,NOW())=1;
END//
delimiter ;
创建事件
CREATE event event_clearEmployOutBlack
ON SCHEDULE
EVERY 1 MINUTE STARTS NOW()
DO CALL clearEmploutBlack() ;