两个表
1 vhinfo表
  id name  status 
  1  奔驰    Y
2 vhmaintain
  id  infoid  stardate 
  1     1      2011-09-28 08:58:22
如果当前时间等于表2的stardate字段的时间name就把表1的status字段改为N。
这个存储过程应该怎么写 。急用  谢谢各位大虾

解决方案 »

  1.   

    try:
    SET GLOBAL event_scheduler = 1;
    CREATE EVENT e_totals ON SCHEDULE AT '2011-09-27 120:00:00'
    DO call dd();DROP PROCEDURE IF EXISTS `dd`$$CREATE PROCEDURE `dd`()
    BEGIN
    SELECT 1 INTO @aa FROM 表2 WHERE TIME(stardate)=TIME(NOW());
    IF @aa=1 THEN
    UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N';
    END IF;
    END$$DELIMITER ;
      

  2.   

    or
    DELIMITER $$create EVENT `e` ON SCHEDULE EVERY 1 SECOND STARTS '2011-09-28 11:32:24' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
    SELECT 1 INTO @aa FROM 表2 WHERE TIME(stardate)=TIME(NOW());
    IF @aa=1 THEN
    UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N';
    END IF;
    END$$DELIMITER ;
      

  3.   

    or
    DELIMITER $$create EVENT `e` ON SCHEDULE EVERY 1 SECOND STARTS '2011-09-28 11:32:24' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
    UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N' WHERE TIME(stardate)=TIME(NOW()) ;
    END$$DELIMITER ;
      

  4.   


    -- 顶,还需要注意一点:你数据库的事件定时执行功能是否已开启 ?
    -- 用下面的方法查看:
    -- 要使定时起作用 MySQL的常量GLOBAL event_scheduler必须为on或者是1-- 查看是否开启定时器
    SHOW VARIABLES LIKE '%sche%'; -- 开启定时器 0:off 1:on
    SET GLOBAL event_scheduler = ON;  -- 开启事件
    ALTER EVENT event_test ON   
    COMPLETION PRESERVE ENABLE;  -- 关闭事件
    ALTER EVENT event_test ON   
    COMPLETION PRESERVE DISABLE;
    -- MySQL 查看EVENT 相关信息:
    SELECT * FROM information_schema.EVENTS;
    select `name` from mysql.proc where db = 'groupon' and `type` = 'PROCEDURE';
      

  5.   

    也可以写好存储过程 放到crontab里执行
      

  6.   


    UPDATE 表1 a INNER JOIN 表2 b ON a.id=b.id SET a.status='N' WHERE TIME(stardate)=TIME(NOW()) ;
    简单一些
      

  7.   

    不建议在事件中做这个动作,因为你根本无法保证now()= stardate ,这个运行的时刻是由MYSQL而定的,并不保证一定会在每秒的这个时候运行。
    如果你只是想在界面上显示,status  为N,则可以直接通过查询或者视图实现。select vhinfo.id,vhinfo.name,if(vhmaintain.stardate>=now(),'N','Y') as status  
    from vhinfo inner join vhmaintain on vhinfo.id=vhmaintain.infoid