2017-07-07 10 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に各月の第1月曜日の日付をテーブルに保存するコードがあります。

ただし、このクエリを実行するとこのエラーが発生します。

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

mysqlのイベントをスケジュールするには、トリガーの仕組みを理解する必要があります。この詳細なチュートリアルをチェックしてみてください。 https://www.sitepoint.com/how-to-create-mysql-events/

また

あなたの質問に基づいて、私は本当にcronジョブは、あなたのニーズに最適であると考えています。この記事をチェックしてください。あなたのイベントは複数の文を持っているのでhttps://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428

+0

あなたのヒントをありがとう。 –

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 ; 
関連する問題