CREATETRIGGER update_activity_status -- 触发器名称 BEFORE UPDATEON activity_info -- 所在表格 FOREACHROW BEGIN IF NEW.act_statue <>4THEN-- 只有当 act_status 不为 4 时才进行后续判断 -- act_statue 为我数据库中的属性 IF NEW.act_start_time >CURRENT_TIMESTAMPTHEN SET NEW.act_statue =1; -- 未开始 ELSEIF NEW.act_end_time <CURRENT_TIMESTAMPTHEN SET NEW.act_statue =3; -- 已结束 ELSE SET NEW.act_statue =2; -- 进行中 END IF; END IF; END;
但,这个只能在更新的时候才能生效,我希望是按一定时间来自动更新
(2)事件:推荐。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
CREATE EVENT update_activity_status_daily ON SCHEDULE EVERY1DAY-- 设置发生的间隔周期 STARTS CURRENT_TIMESTAMP-- 当前时间 DO BEGIN UPDATE activity_info SET act_statue = CASE WHEN act_statue IN (1, 2, 3) THEN CASE WHEN act_start_time >CURRENT_TIMESTAMPTHEN1-- 未开始 WHEN act_end_time <CURRENT_TIMESTAMPTHEN3-- 已结束 ELSE2-- 进行中 END ELSE act_statue -- 保持不变 END; END;