6.2 事件的创建,修改和删除

发布于:2024-06-21 ⋅ 阅读:(119) ⋅ 点赞:(0)

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;


网站公告

今日签到

点亮在社区的每一天
去签到