MySQL中EVENT的用法

一、Event创建语法

CREATE Event [IF NOT EXISTS] event_name -- 创建使用create event
ON SCHEDULE schedule -- on schedule 什么时候来执行,执行频率
[ON COMPLETION [NOT] PRESERVE] -- 调度计划执行完成后是否还保留
[ENABLE | DISABLE] -- 是否开启事件,默认开启
[COMMENT 'comment'] -- 事件的注释
DO event_body; -- 这个调度计划要做什么?

[IF NOT EXISTS]如果新建的event_name系统里不存在,则创建一个新的,如果已经存在了,则提示已经存在。如果省略的话,系统里不存在新的event_name则创建成功,如果已经存在了,会保存。

[ON COMPLETION [NOT] PRESERVE 如果带了not当事件执行完后,就自动删除,不保留事件。如果不加not事件执行完会保留下来,该项不写的时候,默认是执行完事件保留下来。

[ENABLE | DISABLE]ENABLE时事件开启,当到了事件执行时间,系统会自动执行event_body里定义的语句,如果设置的是DiSABLE则事件关闭,到了执行时间,事件也不会执行。该项没有设置时,默认为事件开启。

[COMMENT 'comment']comment是事件注释,对事件进行解释说明。

event_body事件主体,可以是单条DML语句,可以是多条DML语句,多条时需要写在begin……end之间,也可调用存储过程。

二、执行时间说明

1、单次计划:

  • 在2022年2月1日4点执行一次

  • on schedule at '2022-02-01 04:00:00’

 2、重复计划

  • on schedule every 1 second 每秒执行一次

  • on schedule every 1 minute 每分钟执行一次

  • 也可以是hour、day、week、month、year

 3、指定开始时间的重复计划

  • 每天在20:00:00执行一次

  • on schedule every 1 day starts ‘2022-6-16 20:00:00'

三、如何查看Event

 

查看有哪些event
Show events; 或者通过Select * from information_schema.events;
查看event具体内容
SHOW CREATE EVENT event_name1;
删除event
DROP EVENT event_name;
修改event
可以先删除,再重新创建
也可以ALTER EVENT event_name …… 省略号后边的内容和创建event一样

四、实例

创建一个表stu_bak,用此表来备份student表的数据;

create table stu_bak select * from student;
接着,我们创建存储过程student_bak_pro,用来备份student表中的最新数据
CREATE DEFINER=`root`@`localhost` PROCEDURE `stu_bak_pro`()
BEGIN
insert into stu_bak select * from student t where not EXISTS (select * 
from stu_bak t1 where t1.sno=t.sno);
COMMIT;
END
然后,我们再创建event,让系统每3秒自动执行以下存储过程stu_bak_pro
CREATE Event stu_bak_event
ON SCHEDULE every 3 second
ON COMPLETION PRESERVE
DO call stu_bak_pro();

创建事件,每5秒钟定时删除student表中过期2分钟的数据:

create event del_stu
on schedule every 5 second
on completion preserve
do delete from stu where timestamp< (current_timestamp() + interval -2 minute);

  

posted @ 2022-10-02 10:07  华小电  阅读(463)  评论(0编辑  收藏  举报