Mysql 如何使用msql安排事件

Mysql 如何使用msql安排事件,mysql,events,Mysql,Events,我正在尝试创建一个每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 = N

我正在尝试创建一个每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

有人会告诉我我做错了什么。

在mysql中安排事件需要了解触发器是如何工作的。只要看看这个详细的教程,我相信它会有很大的帮助

或者


基于你的问题,我真的相信cronjob最适合你的需要。看看这篇文章

mysql中事件的调度需要您了解触发器是如何工作的。只要看看这个详细的教程,我相信它会有很大的帮助

或者


基于你的问题,我真的相信cronjob最适合你的需要。看看这篇文章

由于您的事件有多条语句,您的问题可能是您需要将定义转换为以下内容:

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。。。结束

由于您的事件有多条语句,您的问题可能是您需要将定义转换为以下内容:

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。。。结束

我找到了做我想做的事情的最佳方法,而不必创建变量或在数据库中存储日期

这是我使用的代码

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 ;

我找到了做我想做的事情的最佳方法,而不必创建变量或在数据库中存储日期

这是我使用的代码

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 ;

你需要阅读mysqlNo中的触发器在MySQL中没有这样的东西。@sloatherasher没有什么这样的东西?MySQL有触发器和事件已经有一段时间了。你需要阅读MySQL中的触发器。MySQL中没有这样的东西。@Sloachr没有什么这样的东西?MySQL已经有触发器和事件一段时间了。在分析过程中发现了2个错误。日期类型未知。(位置171的“如果”附近)日期类型未知。(靠近255位的“结束”)我的东西有语法错误。是的,这就是为什么我说“类似”。。。我很少处理事件,但回想起来它们声明类似于例程和触发器。您也可以尝试使用局部变量,而不是会话(@前缀)变量。我无法在事件中声明变量。我不知道为什么。在分析过程中发现了2个错误。日期类型未知。(位置171的“如果”附近)日期类型未知。(靠近255位的“结束”)我的东西有语法错误。是的,这就是为什么我说“类似”。。。我很少处理事件,但回想起来它们声明类似于例程和触发器。您也可以尝试使用局部变量,而不是会话(@前缀)变量。我无法在事件中声明变量。我不知道为什么。谢谢你的提示。谢谢你的提示。