如何在每XX:50秒调度一个MySQL事件?

qlvxas9a  于 2023-10-15  发布在  Mysql
关注(0)|答案(2)|浏览(108)

我有一个MySQL表与字段名的结果。我想使用一个事件,每XX:50秒执行一次,并通过一个随机数更新字段的值。
需要关于每XX:50秒的语法的帮助。
我试过这个查询。

CREATE EVENT `testEvent` 
ON  SCHEDULE EVERY 50 SECOND 
DO BEGIN

SET @A := (SELECT MAX(`id`) FROM `table`);

UPDATE `table` SET `field` = (RAND()*18) WHERE `id` = @A;   

END

使用该查询,第一次更新在00:00:50完成,然后下一次更新将在00:01:40、00:02:30完成,依此类推。
但是我想在00:00:50,00:01:50,00:02:50等等执行它。

gc0ot86w

gc0ot86w1#

MySql events
每50秒执行一次更新:

CREATE EVENT myevent
ON SCHEDULE EVERY 50 SECOND
DO
   UPDATE yourdb.yourtable SET yourcolumn = RAND();

每2分50秒做一次:

CREATE EVENT myevent
ON SCHEDULE EVERY '2:50' MINUTE_SECOND
DO
   UPDATE yourdb.yourtable SET yourcolumn = RAND();

使用SHOW PROCESSLIST检查事件调度程序是否已启用。如果它是开的,你应该看到一个进程“Daemon“由用户“event_scheduler“。使用SET GLOBAL event_scheduler = ON;启用调度程序(如果当前未启用)。有关配置事件调度程序here的更多信息

ljsrvy3e

ljsrvy3e2#

对OP来说太晚了,但将来可能对别人有用。
如果你想让你的事件在EVERY XX:50秒内执行,那么你想让它在EVERY 1 MINUTE执行,开始时间偏移50秒:

CREATE EVENT `testEvent` 
ON SCHEDULE
    EVERY 1 MINUTE
    STARTS DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:50')
DO
    UPDATE `table` SET `field` = CEIL(RAND() * 18) WHERE id = (SELECT id FROM (SELECT MAX(id) id FROM `table`) t);

如果创建事件时的日期时间为2023-10-09 10:36:53,则事件的Starts值将设置为2023-10-09 10:36:50,这是过去的值。第一次执行仍将保持正确的时间偏移,并在2023-10-09 10:37:50

相关问题