EVENT を作成すると、基本的に次の 2 つのことが行われます。
SELECT
30 日を超えINSERT
てachieve
テーブルに追加された行。DELETE
trends
テーブル内で 30 日以上経過した行。
2 つのスクリプトを個別にテストしたところ、どちらも正常に動作しましたが、EVENT に配置すると構文エラーが発生しました。
イベント本文でユーザーINSERT INTO
またはDELETE
スクリプトのみを使用すると、問題なく保存されます。
スクリプトは次のとおりです。
CREATE DEFINER=`root`@`localhost`
EVENT `trend_decayer` ON SCHEDULE EVERY 1 DAY
STARTS '2016-08-30 00:00:00' ON COMPLETION NOT PRESERVE ENABLE
COMMENT 'Decay trends that are older than 30 days'
DO
INSERT INTO `achieve`
SELECT *, FROM_UNIXTIME(`trends`.`timestamp`) AS `datetime`
FROM `trends`
WHERE `t`.`timestamp` < UNIX_TIMESTAMP(CAST(DATE_SUB(NOW(), INTERVAL 30 DAY) AS DATETIME))
ORDER BY `datetime` DESC;
DELETE
FROM `trends`
WHERE `timestamp` < UNIX_TIMESTAMP(CAST(DATE_SUB(NOW() , INTERVAL 30 DAY) AS DATETIME));
エラーメッセージは次のとおりです。
MySQL said: #1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near
'INTO `achieve`
SELECT *, FROM_UNIXTIME(`timestamp`) AS `datetime` FR' at line 2`