为什么mysql事件时间表在数据库localhost中不起作用?

我已经运行:SET GLOBAL event_scheduler = ON;

我的事件调度程序脚本是这样的:

CREATE EVENT update_status
ON SCHEDULE EVERY 2 MINUTE
DO
UPDATE customer_group
SET is_status = 1
WHERE CURRENT_TIMESTAMP >= end_date

它不是在更新数据库localhost中的值

即使在数据库服务器中,它也是一个更新

有什么解决方案可以解决我的问题吗?

谢谢

解决方法:

查看以下内容.

发出选择CURRENT_TIMESTAMP;要么

select count(*) as theCount
from customer_group
where is_status=1 and CURRENT_TIMESTAMP >= end_date;

换句话说,做一些侦察.事件没有用户界面,因此会静默地成功或失败.

运行一些命令,例如:

show variables where variable_name='event_scheduler';

-目前处于关闭状态(或可能处于开启状态)

指定创建过程中事件的开始时间,并指定ON COMPLETION PRESERVE,例如

drop event if exists `Every_5_Minutes_QuestionUpdateImport`;
DELIMITER $$
CREATE EVENT `Every_5_Minutes_QuestionUpdateImport`
  ON SCHEDULE EVERY 5 MINUTE STARTS '2015-09-01 00:00:00'
  ON COMPLETION PRESERVE
DO BEGIN
    --
    -- all your statements go here
    -- 
END$$
DELIMITER ;

打开事件处理程序:

SET GLOBAL event_scheduler = ON;  -- turn her on and confirm below

确认它:

show variables where variable_name='event_scheduler';

通过数据库名称检查特定数据库中所有事件的状态:

show events from *; -- note * is my database name 

为什么mysql事件时间表在数据库localhost中不起作用?

通过名称在当前选定的数据库中禁用或启用某个事件:

ALTER EVENT Every_2_Minutes_QuestionUpdateImport disable;
ALTER EVENT Every_2_Minutes_QuestionUpdateImport enable;

最后但并非最不重要的一点是,当我编写一个新的Event时,我总是总是首先在event语句中添加日志以登录到日志表(带有insert语句和datetime now()).这样,我就知道它被触发了,像您这样的where子句中的数据可能并没有使我对整个事情产生错误的理解.

我的意思是我到处疯狂.最初,然后我将其删除:

    set filename:=concat('c:\\datavault\\*\\app01\\batches\\processMe_',LPAD(@idToPerform, 8, '0'),'.txt');
    set logMsg:=concat("It would appear I am to process this thing: ",filename);

    insert EvtsLog(incarnationId,evtName,step,debugMsg,dtWhenLogged)
    select incarnationId,evtAlias,10,logMsg,now(); -- 10: some step somewhere in the middle

请记住,出于所有实际目的(也许您的表可能不是您真正关心的问题除外)……作为事件程序员和最好的朋友,我的EvtsLog是您唯一的用户界面.

在手册页上查看ON COMPLETION PRESERVE的含义以及其他内容.

上一篇:java-业务事件框架


下一篇:是否可以使一个对象的生命周期依赖于另一个对象,而无需在C#中进行强耦合?