2017-01-16 40 views
0

我有一个MySQL表看起来像这样如何与事件更新MySQL数据和删除事件后

| begintime | endtime | begindate | enddate | state | 
+------------+----------+------------+----------+-------+ 
| TIME  | TIME  | DATE | DATE | string| 
+------------+----------+------------+----------+-------+ 

我有这样的代码

CREATE EVENT Update 
ON SCHEDULE 
    EVERY 1 SECOND 
DO 
    UPDATE tablename SET tablename.state = CASE 
    WHEN (SELECT CURRENT_TIME() FROM DUAL)>=tablename.begintime AND (SELECT CURDATE()>= tablename.begindate) THEN "Available" 
    WHEN (SELECT CURRENT_TIME() FROM DUAL)>tablename.endtime AND (SELECT CURDATE()= tablename.enddate) THEN "Finished" 
    ELSE "Not Available" 
    END 

我希望服务器总是检查如果有任何这些陈述是真实的,我不知道如何删除事件时:

WHEN (SELECT CURRENT_TIME() FROM DUAL)>tablename.endtime AND (SELECT CURDATE()= tablename.enddate) THEN "Finished 

感谢您的帮助。

回答

0

请试试这个。

SET GLOBAL event_scheduler = ON; 
DROP EVENT IF EXISTS Update1; 
CREATE EVENT Update1 
ON SCHEDULE 
    EVERY 1 SECOND 
DO 
    UPDATE tablename SET tablename.state = 
    CASE 
    WHEN NOW() BETWEEN CONCAT(tablename.begindate,' ',tablename.begintime) AND CONCAT(tablename.enddate,' ',tablename.endtime) THEN "Available" 
    WHEN NOW() > CONCAT(tablename.enddate,' ',tablename.endtime) THEN "Finished" 
    ELSE "Not Available" 
    END; 

要设置为“完成”后落的情况下尝试使用这样

SET GLOBAL event_scheduler = ON; 
DROP EVENT IF EXISTS Update1; 
DELIMITER // 
CREATE EVENT Update1 
ON SCHEDULE 
    EVERY 1 SECOND 
DO BEGIN 
    SELECT @begindate := begindate, 
      @begintime:= begintime, 
      @enddate := enddate, 
      @endtime := endtime FROM tablename; 
    IF (NOW() BETWEEN CONCAT(@begindate,' ',@begintime) AND CONCAT(@enddate,' ',@endtime)) THEN 
     UPDATE tablename SET state = 'Available'; 
    ELSEIF (NOW() < CONCAT(@begindate,' ',@begintime)) THEN 
     UPDATE tablename SET state = 'Not Available'; 
    ELSEIF (NOW() > CONCAT(@enddate,' ',@endtime)) THEN 
     UPDATE tablename SET state = 'Finished'; 
     DROP EVENT IF EXISTS Update1; 
    END IF; 
END// 
DELIMITER ; 
+0

东西,谢谢!有效 :) – Adraythien