MySQL 事件应在每月第一天的 00:00:00(午夜)运行一次

问题描述 投票:0回答:3

我的机器上安装了 Win XP 操作系统和 XAMPP。

我需要在每个月第一天的

00:00:00
(午夜)运行我的活动。 指的是每个月的1号。 (例如 1 月 1 日、2 月 1 日、3 月 1 日……)。

而且,我还需要在同一事件中调用存储过程。 我想仅使用事件/作业来实现这一切,而不是从前端。

请花几分钟时间询问我的问题。

mysql database events scheduled-tasks mysql-event
3个回答
20
投票

MySQL 事件语法非常简单 -

DELIMITER $$
CREATE EVENT event1
ON SCHEDULE EVERY '1' MONTH
STARTS '2011-05-01 00:00:00'
DO 
BEGIN
 -- your code
END$$

DELIMITER ;

活动将于“2011-05-01”的“00:00:00”开始(日期时间必须是将来的时间)。

更多信息 - 使用事件调度程序

不要忘记启用全局事件调度线程 -

SET GLOBAL event_scheduler = 1;

0
投票

假设您的 mysql 数据库位于 Web 服务器上,您可以设置一个在每个月的第一天运行的 cron 作业。您的服务器可能提供一些 Web 界面来执行此操作。

如果您无法从服务器本身启动 cron 作业,可以使用免费的 Web 服务,您可以在其中设置 cron 作业,在给定时间调用服务器上的脚本。

cron 作业调用的脚本可以是运行查询的简单 php 脚本。

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_query(' /* insert query here */ ');
mysql_close($link);

您可能需要进行一些错误检查,并向自己发送有关成功/失败的电子邮件,或者在日志文件中留下一些消息。这样您就可以监控脚本是否运行和/或成功。


0
投票

例如,您创建

test
表,如下所示:

CREATE TABLE test (
  num int
);

然后,插入

num
1
的行,如下所示:

INSERT INTO test (num) VALUES (1);

现在,您创建

plus_one
事件,该事件从
1
开始每隔一个月将
num
添加到
2023-11-01 00:00:00
,如下所示。 *如果
2023-11-01 00:00:00
已经过去,
plus_one
活动自您创建
1
活动后,自
num
开始,每隔一个月就会将
2023-12-01 00:00:00
添加到
plus_one
。 *我的回答文档解释MySQL中的事件:

DELIMITER $$

CREATE EVENT plus_one
ON SCHEDULE EVERY 1 MONTH
STARTS '2023-11-01 00:00:00'
DO
BEGIN
UPDATE test SET num = num + 1;
END$$

DELIMITER ;

然后,您可以检查

plus_one
活动每隔一个月将
1
添加到
num
,如下所示:

mysql> SELECT * FROM test;
+------+
| num  |
+------+
|  2   |
+------+
© www.soinside.com 2019 - 2024. All rights reserved.