每 5 分钟更新一次值
Posted
技术标签:
【中文标题】每 5 分钟更新一次值【英文标题】:Update every 5 minutes a value 【发布时间】:2020-06-23 10:17:17 【问题描述】:我正在使用 mysql 数据库,我想知道是否有任何方法可以每 x 分钟/小时/天修改列的值。
例如,我想每 5 分钟执行一次以下查询,UPDATE table SET x=0;
。
我可以从 phpMyAdmin 界面设置一个事件或类似的东西吗?
【问题讨论】:
是的,你可以在 MySQL 中定义一个event
。
你可以像 juergen 所说的那样,从你的主机或 MySQL 中设置一个 cron 任务(或 cron 作业)。
使用事件。它比 cron 工作更好。当数据库未运行时,cron 作业也每 5 分钟运行一次,然后生成错误。事件调度程序仅在数据库运行时运行
@Viorel 。 . .这是一个 X-Y 问题。我想不出任何我想这样做的合理情况。你应该问另一个问题,描述你真正想要完成的事情。
【参考方案1】:
我不知道如何使用 PHPMyAdmin 接口来创建事件,但是,这可以在“纯”SQL 中完成:
CREATE EVENT IF NOT EXISTS your_event_name
ON SCHEDULE EVERY 5 MINUTE
DO UPDATE table SET x=0;
关于ON SCHEDULE EVERY 5 MINUTE
部分,这将立即执行该事件,然后每 5 分钟执行一次,直到永远。
如果要延迟执行,可以在EVERY
语句后添加STARTS
:
-- This will delay the first execution in 1 hour
ON SCHEDULE EVERY 5 MINUTE STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR
您可以使用 ENDS
定义 EVENT 何时停止工作:
-- This will end the event in 1 week
ON SCHEDULE EVERY 5 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 1 WEEK
当然,STARTS
和 ENDS
也可以结合使用
-- This will end the event in 1 week
ON SCHEDULE
EVERY 5 MINUTE -- Play every 5 minutes
STARTS CURRENT_TIMESTAMP + INTERVAL 1 HOUR -- Start in 1 hour
ENDS CURRENT_TIMESTAMP + INTERVAL 1 WEEK -- End in 1 week
如果您有超过 1 个查询要在事件中执行,您需要将指令包装在 BEGIN
/ END
中:
DELIMITER $$
CREATE EVENT IF NOT EXISTS your_event_name
ON SCHEDULE EVERY 5 MINUTE
DO
BEGIN
UPDATE table1 SET x=0;
UPDATE table2 SET foo='bar';
END $$
DELIMITER ;
欲了解更多信息,请查看documentation
【讨论】:
phpMyAdmin 有一个“事件”选项卡可以帮助设置,但是由于要运行的 SQL 查询是直接输入的,所以 GUI 确实只保存了几行 SQL 来设置计划,定义器,以及其他一些零碎的东西。你的回答很全面。 谢谢,@Cid。这是工作。这就是我要找的。span> 【参考方案2】:我不了解 PHPMyAdmin,但是像 Apache NiFi 这样的工具对于此类调度操作非常有用。只需使用处理器并设置调度设置。欲了解更多信息:
https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.11.3/org.apache.nifi.processors.standard.PutSQL/index.html
【讨论】:
以上是关于每 5 分钟更新一次值的主要内容,如果未能解决你的问题,请参考以下文章