迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MySQL >

事件调度程序或在 MySQL 中设置计时器

作者:迹忆客 最近更新:2024/03/26 浏览次数:

本教程将指导你创建一个 EVENT,也称为 MySQL 计时器。

我们将看到如何在 MySQL 中设置计时器以让 MySQL 操作数据(例如,UPDATE/INSERT/DELETE 数据)。它还将在提到的日期和时间进行备份(如果需要)。

我们将考虑不同的场景来研究 MySQL EVENT。此外,讨论它的重要性和好处。对于本文,我们使用的是 MySQL 版本 8.0.27,但你可以从他们的官方网站获得更新的版本(如果有)。


MySQL 事件及其重要性

MySQL EVENT 是用于安排某些操作的任务 - 例如,更新列、获取表或数据库备份。

你可以创建``事件将只执行一次或根据给定的时间间隔重复 - 例如,每分钟、每小时、每月或每年。

没有固定数量的语句来创建 EVENTEVENT 正文中可以有许多行。

如果 EVENT 有多于一行,则正文必须包含在 BEGINEND 块中。同样重要的是要知道预定的 EVENT 命令存储在数据库中并在预定的日期时间执行。

创建事件对于以下好处很重要:

  • 让每个人都在同一页面上
  • 设定你的目标
  • 管理日程并执行事件
  • 用于优化表格、更新数据
  • 为非高峰时间生成有用的报告
  • 让你优先处理你的任务
  • 节省你的金钱和时间

在 MySQL 中 Event 调度程序或设置定时器

延误对制作团队和品牌来说都是非常昂贵的。

安排事件或为特定字段(列)设置计时器,然后将它们转储到项目报告的单独文件中将节省他们的时间。这样,它会让他们专注于其他生产性任务。

MySQL 使用一个名为 event_scheduler 的线程来执行所有事件。如果 event_scheduler 的值是 ON,那么 EVENT 才会被执行;否则,它不会。

你必须使用以下命令将 event_scheduler 的值设置为 ON

SET GLOBAL event_scheduler = ON;

现在,如果你创建一个事件,你怎么知道它会被执行?使用以下命令查看。

SHOW PROCESSLIST;

让我们看看将 event_scheduler 的值设置为 ON 之前和之后的输出。

在第一个输出中,你不能执行 EVENT,但在第二个输出中,你可以。这是因为第二个屏幕截图的 event_schedulerON

输出:

你可以创建``事件用于不同的目的 - 例如,事件将只运行一次或每年运行一次,或者在给定的时间间隔内运行一次。让我们在示例代码的帮助下开始理解。

我们在 person 数据库中有一个 student 表,该表在当前时间有以下记录。

让我们创建以下事件来了解一次性事件。示例代码如下。

SET GLOBAL event_scheduler = ON;

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT
ON SCHEDULE AT CURRENT_TIMESTAMP
DO
INSERT INTO person.student (id, FIRST_NAME, LAST_NAME, GENDER, EMAIL)
VALUES 
(7, 'Thomas', 'Christoper', 'Male', 'tchristopher@gmail.com');

在上面给出的代码中,我们将 event_scheduler 的值设置为 ON 以执行 EVENT

然后我们创建了一个 EVENT,将其命名为 ONE_TIME_EVENT,并将其安排在 CURRENT_TIMESTAMP。这个 EVENT 表示它将在 CURRENT_TIMESTAMP 上执行一次然后过期。

只有当它不存在时才会创建此 EVENT。这个 EVENT 的工作是 INSERTstudent 表中的一行。

创建并执行此 EVENT 后,检查 student 表以查看新记录(见以下截图)。

输出:

假设你必须创建一个将在 CURRENT_TIMESTAMP 的 20 秒后执行的事件。这个事件也只会执行一次。写下下面的代码就明白了。

CREATE EVENT IF NOT EXISTS ONE_TIME_EVENT_WITH_INTERVAL
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 20 SECOND
DO
INSERT INTO person.student 
VALUES 
(8, 'Suzu', 'Aly', 'Fmale', 'aly.suzu@yahoo.com');

输出:

你可以在 20 秒后在 student 表中看到新记录。

请记住,如果你在 20 秒之前检查它,你将不会在 student 表中看到这一新行。让二十秒过去,然后检查。

使用以下代码查看创建和安排了多少事件。

SHOW EVENTS FROM classicmodels;

输出:

为什么上面的截图中没有列出任何 EVENT?因为我们所有的活动现在都过期了,根据这篇文章。

你可以使用 ON COMPLETION PRESERVE 子句跟踪所有事件,无论它们是否过期,如下所示。

CREATE EVENT TEST_PRESERVE_CLAUSE
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ON COMPLETION PRESERVE
DO
INSERT INTO tests(test_name,test_date)
VALUES('Testing Preserve Clause',NOW());

如果你想创建一个从 CURRENT_TIMESTAMP 开始,每分钟执行一次,并在一个小时后到期的事件怎么办。它被称为重复事件。

你可以使用以下代码进行创建和练习。

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

在上面给出的代码中,我们使用 STARTSENDS 告诉 EVENT 开始和结束时间。当你认为现在不需要该事件时,你也可以删除该事件。

在以下代码中用你的 EVENT 名称替换 name

DROP EVENT [IF EXIST] name;

让我们以另一种情况为例,你创建了 EVENT 并将工作移交给另一个开发人员。没有 COMMENT 容易理解吗?当然不是。

CREATE EVENT 并通过添加 COMMENT 来练习,如下所示。

CREATE EVENT RECURRING_EVENT
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
COMMENT 'It will add a new record every minture for one hour'
DO
INSERT INTO Tests(test_name,test_date)
 VALUES('This is recurring event test',NOW());

我们已经在 EVENT 正文中仅使用一行来学习 EVENT。如果你有多条线路怎么办?让我们通过下面的示例代码来理解它。

delimiter |
CREATE EVENT IF NOT EXISTS EVENT_FOR_UPDATE_COLUMNS_AND_DUMP
ON SCHEDULE AT current_timestamp
DO BEGIN
UPDATE student SET GENDER = 'M' WHERE student.GENDER = 'Male';
UPDATE student SET GENDER = 'F' WHERE student.GENDER = 'Female';
Table student INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n';   
END |
delimiter ;

你将在提供的代码中的 EVENT 正文中看到三个查询。每当你在 EVENT 正文中包含多行时,请将它们包含在 BEGINEND 中,如上所述。

在本例中,我们创建了一个从 CURRENT_TIMESTAMP 开始的 EVENT。它将根据 UPDATE 语句更新 GENDER 列并将数据导出到 .CSV 文件中。

对于导出,你必须使用此路径 C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/file.csv(如果你在 C 驱动器中安装了 MySQL)。否则,你将收到以下错误。

Error Code: 1290. The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

如果你已将 MySQL 安装在其他位置,请使用 EVENT scheduler,然后使用以下命令查找你的文件将被导出的路径。

SHOW VARIABLES LIKE "secure_file_priv";  

结论

我们在本教程中了解了 MySQL EVENT 调度程序。

我们学习了如何创建将按照提供的时间间隔执行一次的事件,根据给定的时间间隔仅执行一次。我们还探索了创建包含多行的事件、更新数据,然后将其导出到单独的文件中。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 MySQL 中声明和使用变量

发布时间:2024/03/26 浏览次数:102 分类:MySQL

当你需要在 MySQL 中的脚本中存储单个值时,最好的方法是使用变量。变量有不同的种类,有必要知道何时以及如何使用每种类型。

在 MySQL 中实现刷新权限

发布时间:2024/03/26 浏览次数:179 分类:MySQL

本教程介绍了 MySQL 中的刷新权限命令,用于刷新授权表并影响允许的更改。

在 MySQL 中设置时区

发布时间:2024/03/26 浏览次数:86 分类:MySQL

在本教程中,我们将学习如何在 MySQL 服务器中更改时区。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便