mysql事件

本文详细介绍了MySQL中的事件调度器,包括如何创建、查询、修改和删除事件。事件调度器可在特定时间执行任务,不同于基于表事件的触发器。文章通过案例展示了如何设置时间间隔,如每5秒执行,以及创建名为event_user的事件,定时向tb_user表中插入数据。同时,还介绍了查询、修改和管理事件的方法。

1、概述

事件调动器可以在指定的时刻执行某些特定的任务,以此取代只能由操作系统的计划任务来执行的工作。

事件和触发器的区别
事件是基于特定时间周期来执行某些任务
触发器是基于某个表所产生的事件触发

在使用事件调度器之前,确保event_scheduler已开启

-- 查询功能是否开启
SHOW VARIABLES LIKE 'event_scheduler';
-- 或者查看系统变量
SELECT @@event_scheduler;

如果系统返回的结果是OFF,需执行

-- 开启功能命令:
SET GLOBAL event_scheduler = 1;
SET GLOBAL event_scheduler = ON;
-- 关闭功能命令:
SET GLOBAL event_scheduler = 0;
SET GLOBAL event_scheduler = OFF;

2、创建事件

语法格式

CREATE 
      [DEFINER={user | CURRENT_USER}]
      EVENT [IF NOT EXISTS] event_name
    ON SCHEDULE schedule(调度时间设置)
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO sql_statement;
子句说明
DEFINER可选,用于定义事件执行时检查权限的用户
IF NOT EXISTS可选项,用于判断要创建的事件是否存在
EVENT event_name必选,用于指定事件名,event_name的最大长度为64个字符,如果为指定event_name,则默认为当前的MySQL用户名(不区分大小写)
ON SCHEDULE schedule必选,用于定义执行的时间和时间间隔
ON COMPLETION [NOT] PRESERVE可选,用于定义事件是否循环执行,即是一次执行还是永久执行,默认为一次执行,即 NOT PRESERVE
ENABLE | DISABLE | DISABLE ON SLAVE可选项,用于指定事件的一种属性。其中,关键字ENABLE表示该事件是活动的,也就是调度器检查事件是否必选调用;关键字DISABLE表示该事件是关闭的,也就是事件的声明存储到目录中,但是调度器不会检查它是否应该调用;关键字DISABLE ON SLAVE表示事件在从机中是关闭的。如果不指定这三个选择中的任意一个,则在一个事件创建之后,它立即变为活动的。
COMMENT ‘comment’可选,用于定义事件的注释
DO event_body必选,用于指定事件启动时所要执行的代码。可以是任何有效的SQL语句、存储过程或者一个计划执行的事件。如果包含多条语句,可以使用BEGIN…END复合结构

一些常用的时间间隔设置:
(1)每隔5秒钟执行

ON SCHEDULE EVERY 5 SECOND

(2)每个月的第一天凌晨1点执行

ON SCHEDULE EVERY 1 MONTH STARTS DATE_ADD(DATE_ADD(DATE_SUB(CURDATE(),INTERVAL DAY(CURDATE())-1 DAY),INTERVAL 1 MONTH),INTERVAL 1 HOUR)

(3)每十二个小时,从现在起三十分钟后开始,并于现在起四个星期后结束

ON SCHEDULE EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK

3、案例

创建名称为event_user的事件,用于每隔5秒钟向数据表tb_user(用户信息表)中插入一条数据。
(1)首先创建tb_user(用户信息表)。

-- 创建用户信息表
CREATE TABLE IF NOT EXISTS tb_user
(
	id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	name VARCHAR(30) NOT NULL COMMENT '用户姓名',
	create_time TIMESTAMP COMMENT '创建时间'
) COMMENT = '用户信息表';

(2)创建事件

-- 创建事件
CREATE EVENT IF NOT EXISTS event_user
ON SCHEDULE EVERY 5 SECOND
ON COMPLETION PRESERVE
COMMENT '新增用户信息定时任务'
DO INSERT INTO tb_user(name,create_time) VALUES('博客',NOW());

4、查询事件

SELECT * FROM information_schema.events; 

5、修改事件

在MySQL 5.1及以后版本中,事件创建之后还可以使用ALTER EVENT语句修改其定义和相关属性。其语法如下:

ALTER
	[DEFINER={user | CURRENT_USER}]
	EVENT [IF NOT EXISTS] event_name
	ON SCHEDULE schedule
	[ON COMPLETION [NOT] PRESERVE]
	[ENABLE | DISABLE | DISABLE ON SLAVE]
	[COMMENT 'comment']
	DO event_body;

6、启动与关闭事件

-- 启动名称为event_user的事件。
ALTER EVENT event_user ENABLE;
-- 关闭名称为event_user的事件。
ALTER EVENT event_user DISABLE;

7、删除事件

在MySQL 5.1及以后版本中,删除已经创建的事件可以使用DROP EVENT语句来实现。

DROP EVENT IF EXISTS event_user;
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

twdnote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值