我试图制作一个每1小时执行一次的活动。
这是代码。
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 :(得分:1)
在mysql中调度事件涉及到了解触发器的工作原理。看看这个详细的教程,我相信它会走很长的路。 https://www.sitepoint.com/how-to-create-mysql-events/
可选地
基于您的问题,我真的相信cronjob最适合您的需求。看看这篇文章。 https://code.tutsplus.com/tutorials/managing-cron-jobs-with-php--net-19428
答案 1 :(得分: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
答案 2 :(得分: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 ;