2017-07-07 59 views
0

我正在尝试创建一个每1小时执行一次的事件。如何使用msql来安排事件

这是代码。

mysql> DROP EVENT IF EXISTS `clean`; 

CREATE EVENT IF NOT EXISTS `clean` 
     ON SCHEDULE 
     EVERY 1 HOUR 
     STARTS '2017-07-07 16:00.00' 
     DO 
      SET @isTime = IF(table_name.programed_time = NOW(), 'y', 'n'); 
      IF @isTime = 'y' THEN DELETE FROM `cell_name` 
      WHERE `cell_name` = 'value' 

我希望活动仅在周一16:00运行。所以在我的应用程序中,我有一个代码将每个月的每个第一个星期一的日期在16:00保存在一个表中。

但我在运行此查询时遇到此错误。

Unknown type of declaration near to IF. 
Something is wrong in its syntax near 'IF @isTime ='y' 
THEN DELETE FROM `cell_name` WHERE `cell_name 'in the line 

有人可以告诉我我做错了什么。

+0

您需要阅读关于mysql中的触发器 –

+0

MySQL中没有这样的事情。 –

+0

@SloanThrasher没有这样的事情? MySQL已经有一段时间触发器和事件了。 – Uueerdo

回答

1

由于您的活动有一个以上的声明,您的问题可能是,你需要定义转换为这样的事情:基本上

DELIMITER $$ 
CREATE EVENT IF NOT EXISTS `clean` ON SCHEDULE EVERY 1 HOUR STARTS '2017-07-07 16:00.00' 
DO 
BEGIN 
    DECLARE isTime CHAR(1); 
    SET isTime := IF(table_name.programed_time = NOW(), 'y', 'n'); 
    IF isTime = 'y' THEN 
     DELETE FROM `cell_name` WHERE `cell_name` = 'value'; 
    END IF; 
END$$ 

DELIMITER ; 

,围住身体BEGIN... END

+0

分析过程中发现2个错误。 日期类型未知。 (位置171附近的“IF”) 日期类型未知。 (位置255附近的“END”)我的东西有语法错误。 –

+0

是的,这就是为什么我说“类似”的原因......我曾与事件很少,但回想起他们宣布类似的例程和触发器。 – Uueerdo

+1

您也可以尝试使用局部变量,而不是会话(@前缀)变量。 – Uueerdo

0

我发现最好的方式来做我想做的事情,而不必创建变量或将日期存储在数据库中。

这是我使用的代码。

DROP EVENT IF EXISTS `clean`; 

DELIMITER // 

CREATE EVENT IF NOT EXISTS `clean` 
     ON SCHEDULE 
     EVERY 1 DAY 
     STARTS '2017-01-27 16:00.00' 
     COMMENT 'EVENT runs daily at 4 pm. DELETE executed first Monday month' 
     DO 
      BEGIN 
      IF (DAYOFMONTH(NOW()) BETWEEN 1 AND 7 AND 
       DAYNAME(NOW()) = 'Monday') THEN 
       DELETE FROM `table_name` 
       WHERE `cell_name` = 'value'; 
      END IF; 
      END// 

DELIMITER ;