我已经运行: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
通过名称在当前选定的数据库中禁用或启用某个事件:
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的含义以及其他内容.