2017-07-07 60 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 ;