【问题标题】:mysql scheduled events problemsmysql预定事件问题
【发布时间】:2014-07-29 07:16:45
【问题描述】:

我有一个包含starttime,endtime,status 的餐桌预订。我想创建一个事件调度程序来检查当前时间是否大于endtime。如果大于则将status 设置为0。
但我希望该调度程序每天从早上 6 点到下午 6 点以 5 分钟的间隔永远运行。到目前为止我已经写了一个代码

CREATE EVENT rescancel  
ON SCHEDULE EVERY 5 MINUTE  
STARTS 06:00:00   
ENDS 18:00:00
DO  
UPDATE reservation SET status = 0 WHERE CURTIME() > endtime  

我怎样才能确保这个活动每天都进行?到目前为止,从我从不同网站上读到的内容来看,这段代码从早上 6 点到下午 6 点每 5 分钟运行一次,仅在创建事件的那一天。我错了吗?我是 mysql 触发器和事件的新手。

【问题讨论】:

  • 全天每5分钟运行一次,查询当前时间是否在早上6点到下午6点之间。

标签: mysql


【解决方案1】:

我使用类似于检查日期和时间的东西,所以你可以使用:

DELIMITER ||
CREATE EVENT rescancel
ON SCHEDULE
EVERY 5 MINUTE
STARTS NOW()
ON COMPLETION PRESERVE
COMMENT ''
  DO
  BEGIN
  IF CURRENT_TIME BETWEEN '06:00:00' AND '18:00:00' THEN
    UPDATE reservation SET status = 0 WHERE CURTIME() > endtime;
  END IF;
  END ||

DELIMITER ;

【讨论】:

  • 我认为这行得通!但根据此代码,虽然不会检查状态,但即使在下午 6 点之后也会发生事件。没有办法防止下午 6 点之后发生事件吗?
  • 据我所知,没有办法只在每天的时间 x 和 y 之间运行预定的事件。有一个 STARTS 和 ENDS 子句,但这只是它结束的时候,并且不会再次运行(例如,我只希望它在接下来的两个小时内运行)。
【解决方案2】:

在查询中测试当前时间:

CREATE EVENT rescancel
ON SCHEDULE EVERY 5 MINUTE
DO
    UPDATE reservation
    SET status = 0
    WHERE HOUR(CURTIME()) BETWEEN 6 AND 17
    AND CURTIME() > endtime

【讨论】:

    猜你喜欢
    • 2016-08-09
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多