创建定时器:
create event myevent  on schedule every 30 second
starts current_timestamp 
do 
    update manager set b_hostState=0 where  now()-interval 80 second> d_lastUpdate;创建触发器:
delimiter |
create trigger manager_bu before update on manager for each row
    begin
     
     set new.d_lastUpdate=now();    end;|
delimiter ;
显然定时器的update对update触发器产生了影响,但是影响很严重:有的记录是0,但有的记录就是1,不变0了,怎么回事?

解决方案 »

  1.   

    你看看你的event是否还能继续正常的执行?select * from information_schema.event;
    看看其实你上面的操作可以不用触发器,直接在update语句里面一步到位了:
    create event myevent  on schedule every 30 second
    starts current_timestamp
    do
        update manager set b_hostState=0,d_lastUpdate=now() where  now()-interval 80 second> d_lastUpdate;
      

  2.   

    information_schema中文解释是什么,数据库里面的表么,
    我查询了select * from manager(触发器所在的表),可以显示的,没有问题
    按照你上面的写法,对于一条记录的更改都不起作用了.......
      

  3.   


    数据字典至于你的问题,建议你能提供相关的测试方法,也就是如果在其它机器上再现你的问题。
    比如你的 create table / create event / create trigger 
    还有你的 insert , update 语句。这样其它人可以进行测试。
      

  4.   

    终于搞定了,纠结了我好一阵子,不知道是什么问题,我换一台机子就好了,代码本身没什么问题
    最终代码修改为创建定时器:
    create event myevent  on schedule every 10 second
    starts current_timestamp 
    do 
        update manager set b_hostState=0 where b_hostState=1 and now()-interval 70 second> d_updateTime;创建触发器:
    delimiter |
    create trigger manager_bu before update on manager for each row
        begin
        
    set new.d_updateTime=now();

        end;|
    delimiter ;
    问题解决了,但还有一个疑问:从测试结果来从update 到set b_hostState=0的时间正好相差10second的整数倍,这是没什么呢?每条记录的update时间是不一样的,检测的时间都是固定的周期,难道event 对每条记录单独起作用?为什么会相差很好解释,为什么都是10second的整数倍呢?求解~~~~~
      

  5.   

    create event myevent  on schedule every 10 second你的事件是 10 s 动作一次。在你的事件中 update manager ,这样会触发 create trigger manager_bu before update 这个 触发器 ,从而执行  set new.d_updateTime=now();