想建立一个触发器,当有更新为d_lastUpdate=null时(d_lastUpdate为这条记录的更新时间,就是这条记录当前没有更新),触发器把b_hostState设置为0
触发器代码如下:
delimiter |
create trigger manager_bu before update on manager for each row
    begin
     if new.d_lastUpdate=null then
     set new.b_hostState=0;
       end if ;
    end;|
delimiter ;

问题是当update manager set d_lastUpdate=null where v_studentName like '汪%';
d_lastUpdate变为null,b_hostState不会变成0(原来是1状态)
由于只有一个表不能使用after update,如果现在想实现这个功能怎么修改啊,急~~~~~~~~~~`

解决方案 »

  1.   

    if new.d_lastUpdate=null->
    if new.d_lastUpdate is null
      

  2.   

    还有一个问题就是该触发器每5分钟触发一次,不论是否有更新,是不是要用event Event Scheduler控制,怎么弄?
      

  3.   

    if new.d_lastUpdate=null then -------->if new.d_lastUpdate is null then 
      

  4.   

    有结果了,但是=null和is null有什么分别么?
      

  5.   

    NULL不等于NULL,判断NULL要用IS NULL
      

  6.   

    了解,如果要实现每5分钟执行一次用什么方法最简单,要Event Scheduler么?
      

  7.   

    如果只用Event Scheduler貌似可以解决啊,可以重复执行,在给定一个条件进行修改
      

  8.   

    那不应该选择用触发器来完成这个任务。应该用定时任务。
    http://topic.csdn.net/u/20091020/22/c51bb709-6dbc-4fd1-b874-077714ed547e.html
    参考一下这个贴子中的三种方法。
      

  9.   

    看过你的帖子,写了一下代码:(该代码作用是将d_lastUpdate比现在时间相差5分钟的记录的b_hostState设置为0)
    delimiter |
    create event myevent  on schedule every  5 second 
    starts current_timestamp 
    ends  current_timestamp+interval 50 second 
    do 
    update manager set b_hostState=0 where  now()-d_lastUpdate>5 minutes;| 
    delimiter ;
    产生一个错误:ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'minues' at line 5
      

  10.   

    create event myevent  on schedule every  5 minute 
    starts current_timestamp 
    do 
    update manager set b_hostState=0 where  now()-interval 5 minute > d_lastUpdate;1. 由于你这仅是一句,不需要 delimiter 了。
    2. 你好象是想每5分钟执行一次,改成 every  5 minute 
    3. 如果不需要结束,则不需要写 ends 
    4. 你的日期计算和判断改为 now()-interval 5 minute > d_lastUpdate