MySQL数据库中怎么实现定时任务

55次阅读
没有评论

共计 3213 个字符,预计需要花费 9 分钟才能阅读完成。

今天就跟大家聊聊有关 MySQL 数据库中怎么实现定时任务,可能很多人都不太了解,为了让大家更加了解,丸趣 TV 小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、事件概述

在 MySQL 5.1 中新增了一个特色功能事件调度器(Event Scheduler),简称事件。

事件 (event) 是 MySQL 在相应的时刻调用的过程式数据库对象。一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”。

事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工作,而且 MySQL 的事件调度器可以精确到每秒钟执行一个任务,而操作系统的计划任务 (如:Linux 下的 CRON 或 Windows 下的任务计划) 只能精确到每分钟执行一次。

二、事件的优缺点

优点:一些对数据定时性操作不再依赖外部程序,而直接使用数据库本身提供的功能。可以实现每秒钟执行一个任务,这在一些对实时性要求较高的环境下就非常实用了。

缺点:定时触发,不可以调用。

三、事件调度器参数

事件由一个特定的线程来管理。启用事件调度器后,拥有 SUPER 权限的账户执行 SHOW PROCESSLIST 就可以看到这个线程了。

-- 查看事件是否开启。SHOW VARIABLES LIKE  event_scheduler SELECT @@event_scheduler;-- 全局开启事件调度器 SET GLOBAL event_scheduler = ON;-- 全局关闭事件调度器 SET GLOBAL event_scheduler = OFF;-- 永久开启事件调度器(在 my.cnf 配置文件中添加)# 事件调度器启动状态 event_scheduler = on

四、创建事件

一条 create  event 语句创建一个事件。每个事件由两个主要部分组成,第一部分是事件调度(eventschedule,表示事件何时启动以及按什么频率启动;

第二部分是事件动作(event  action),这是事件启动时执行的代码,事件的动作包含一条 SQL 语句,它可能是一个简单地 insert 或者 update 语句,也可以使一个存储过程或者

benin…end 语句块,这两种情况允许我们执行多条 SQL。

一个事件可以是活动 (打开) 的或停止 (关闭) 的,活动意味着事件调度器检查事件动作是否必须调用,停止意味着事件的声明存储在目录中,但调度器不会检查它是否应该调用。在一个事件创建之后,它立即变为活动的,一个活动的事件可以执行一次或者多次。

相关语法:

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 event_body; schedule: AT timestamp [+ INTERVAL interval] ... | EVERY interval [STARTS timestamp [+ INTERVAL interval] ...] [ENDS timestamp [+ INTERVAL interval] ...] interval: quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE | WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE | DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

说明:

五、事件 (定时任务) 管理

1. 查询事件

在 MySQL 中可以通过查询 information_schema.events 表,查看已创建的事件。

-- 查看当前所在库的事件 show events;-- 查看所有事件 SELECT * FROM information_schema.events;

2. 修改事件

事件被创建之后,还可以使用 ALTER EVENT 语句修改其定义和相关属性

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

3. 启动与关闭事件

ALTER EVENT 语句可以让一个事件关闭或再次活动。

-- 启动事件。ALTER EVENT event_name ENABLE;-- 关闭事件。ALTER EVENT event_name DISABLE;

4. 删除事件

删除已经创建的事件可以使用 DROP EVENT 语句来实现。

DROP EVENT IF EXISTS event_name;

六、实例演示

1. 事件 +sql

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

--  创建用户信息表 CREATE TABLE IF NOT EXISTS t1( id INT AUTO_INCREMENT PRIMARY KEY COMMENT  用户编号 , name VARCHAR(30) NOT NULL COMMENT  用户姓名 , create_time TIMESTAMP COMMENT  创建时间 ) COMMENT =  用户信息表 --  创建事件 CREATE EVENT IF NOT EXISTS event_t1ON SCHEDULE EVERY 5 SECONDON COMPLETION PRESERVECOMMENT  新增用户信息定时任务 DO INSERT INTO t1(name,create_time) VALUES(hwb ,NOW());

2. 事件 + 存储过程

-- 创建总表 CREATE TABLE IF NOT EXISTS t_total( userNumber INT COMMENT  用户数 , createtime TIMESTAMP COMMENT  创建时间) COMMENT =  总表 -- 创建名称为 t_total 的存储过程,用于统计前面表插入的数量 CREATE PROCEDURE t_total()BEGIN DECLARE n_total INT default 0; SELECT COUNT(*) INTO n_total FROM t1; INSERT INTO t_total (userNumber,createtime) VALUES(n_total,NOW());END;-- 创建名称为 event_total 的事件,用于在每天 12 点调用存储过程。CREATE EVENT IF NOT EXISTS event_totalON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL 1 DAY), INTERVAL 12 HOUR)ON COMPLETION PRESERVE ENABLEDO CALL t_total();

看完上述内容,你们对 MySQL 数据库中怎么实现定时任务有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注丸趣 TV 行业资讯频道,感谢大家的支持。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3213字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)