6.2.1 事件的概述
事件(Event)是在指定时刻才被执行的过程式数据库对象。
事件通过MySQL中一个很有特色的功能模块——事件调度器(Event Scheduler)进行监视,并确定其是否需要被调用。
MySQL的事件调度器可以精确到每秒钟执行一个任务,比操作系统的计划任务更具实时优势。对于一些实时性要求比较高的应用,如股票交易、火车购票、球赛技术统计等就很适合。
事件和触发器相似,都是在某些事情发生时启动,由于它们相似,所以事件又称为临时触发器(Temporal Trigger)。它们的区别为触发器是基于某个表所产生的事件来触发的, 而事件是基于特定的时间周期来触发的。
使用事件调度器之前必须确保开启事件调度器, 查看当前是否开启事件调度器:
show variable like 'event_scheduler';
或查看系统变量:
select @@ event_scheduler;
如果没有开启事件调度器,可使用以下命令开启:
set globle event_scheduler = 1; 或
set globle event_scheduler = TRUE;
或在MySQL的配置文件my.ini中加上“event_scheduler = 1”或“ set globle event_scheduler = NO”,然后重启MysQL服务器。
6.2.2 事件的创建、删除和修改
1. 创建事件
语法格式:create event [ if not exists ] event_name
on SCHEDULE schedule
[ enable | disable | disable on slave ]
do event_body
其中,这里还涉及到scheduled的描述(AT timestamp子句)和interval的描述(EVERY interval子句)。这里可以参考一下其他大佬的文章:MySQL 事件-CSDN博客
【例6.6】创建现在立即执行的事件E_direct,执行时创建一个表tb。
create event E_direct
on schedule at now()
do
create table tb(timeline timestamp);
这里在执行上述代码时,一定要选择数据库,否则会出现 “ No database selected ” 的错误。
show tables;
select * from tb;
【例6.7】创建事件E_insertTB,每2s插入一条记录到表tb。
create event E_insertTb
on schedule every 2 second
do
insert into tb values(current_timestamp);
select * from tb;
设置的是2s插入一行,这里是一共插入了32行,代表是16秒之后执行的代码。
【例6.8】创建事件E_startDays,从第2天起,每天清空表tb,在2024年12月31日结束。
delimiter $$
create event E_startDays
on schedule every 1 day
starts curdate() + interval 1 day
ends '2024 - 12 - 31'
do
begin
truncate table tb;
end $$
2.修改事件
语法格式:
alter table event_name
[on SCHEDULE schedule]
[rename to new_event_name]
[enable | disable | disable on slave]
[do enent_body]
【例6.9】将事件E_startDays更名为E_firstDays。
alter event E_startDays
rename to E_firstDays;
3.删除事件
可使用drop event 语句。
【例6.10】删除事件E_firstDays。
drop event E_firstDays;