MySQL事件

1.事件的概述
概念: MySQL中的事件,指的是在某个特定的时间根据计划让其自动完成指定的任务或每隔多长时间根据计划做一次指定的任务.
功能:事件是由 MySQL提供的特殊事件调度程序执行与管理的,它适用于每隔一段时间就有固定需求的操作任务(如创建表,删除数据等)
触发器与事件的区别:前者仅针对某个表产生的事件INSERT、 UPDATE、 DELETE)执行特定的任务,而后者是根据时间的推移触发设定的任务,并且操作对象可以是多张数据表.

2.事件的基本操作
MySQL中的事件是由事件调度器 Event Scheduler(特殊的线程)执行和管理的,默认情况下处于关闭状态.
若想要创建的事件能够正常的执行需要开启事件调度器,常用的查看和设置事件调度器的方式是利用全局变量 event scheduler实现的.

查看事件调度器是否开启:

Show Variables Like 'event_scheduler';

在这里插入图片描述
event_scheduler的值为OFF(可以使用数字0代替)表示关闭.
event_scheduler的值为ON(可以使用数字1代替),表示开启事件调度
event_scheduler的值为 DISABLED,用于表示不允许操作事件计划程序,但是没有对应的数字表示,因此推荐读者在设置事件调度器时采用ON和OFF
CREATE EVENT[IFNOT EXISTS] 事件名称ON SCHEDULE时间与频率
[ON COMPLETION [NOT] PRESERVE] [ENABLE |D ISABLE] COMMENT ‘事件的注释’] DO 事件执行的任务主体

事件名:不区分大小写,且必须是一个最大长度不超过64个字符的有效标识符.
ON SCHEDULE时间与频率:定义事件开始丶结束、持续的时间,执行的频率.
ON COMPLETION:用于定义事件一旦过期是否被立即删除,默认值为"NOT PRESERVE"表示删除,设置为 PRESERVE表示不删除.
ENABLE和 DISABLE:可指定当前创建的事件是否可用,默认为 ENABLE表示可用, DISABLE表示禁用
COMMENT:用于为事件设置注释,方便阅读与维护.
DO:后设置事件发生时执行的SQL语句,当SQL语句为多条时,需要放在BEGIN…END中.
CREATE EVENT语句后的时间与频率的设置可实现事件仅执行一次.
AT时间戳[+ INTERVAL时间间隔 时间单位]…
在这里插入图片描述
从现在开始1分钟20秒后向sh_goods_category中添加一条记录:

Create Event insert_data_event On Schedule At Current_Timestamp+Interval 1
Minute+InteRval 20 second 
Do Insert Into sh_goods_category(id,name) Values(50,"食品");

事件中时间与频率的设置最常使用的就是执行定期的重复操作.
EVERY时间间隔时间单位
[ STARTS时间戳[+INTERVAL 时间间隔 时间单位]…
[ENDS时间戳[+ INTERVAL 时间间隔 时间单位]…

EVERY用于指定事件的执行频率.
STARTS指定事件何时开始重复.
ENDS指定事件何时结束重复.

从现在开始的1年时间内每天删除表中is_on_sale为0update_time大于30天的商品:

#1.创建事件
Create Event If Not Exists delete_event On Schedule Every 1 Day Ends 
Current_Timestamp+Interval 1 Year On Completion 
Preserve Do Call delete_proc();
#2.创建存储过程
Delimiter $$
Create Procedure delete_proc()
Begin
  Delete From sh_goods
  Where To_Days(Now())-To_Days(update_time)>=30 And is_on_sale =0;
End
$$

①查看该事件的相关信息
SHOW EVENTS
②查看事件的创建语句信息
SHOW CREATE EVENT事件名

修改事件的语法,除比创建事件语法多一个 RENAME TO外,其他选项全部相同。
ALTER EVENT event_name [ON SCHEDULE时间与频率]
[ON COMPLETION [ NOT] PRESERVE]
[ RENAME TO 新事件名称]
[ENABLE I DISABLE]
[COMMENT ‘事件的注释’]
[DO 事件执行的任务主体]

#1.修改事件名称和时间频率
Alter Event delete_event On Schedule 
At Current_Timestamp On Completion Preserve
Rename To d_event Do Call delete_proc();
#2.临时关闭事件
Alter Event d_event Disable;

DROP EVENT [IF EXISTS]事件名称;
当删除的事件正在执行时,也会立即停止执行,并从服务器中完成删除.

Drop Event d_event;

版权声明:本文为weixin_46834417原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。