MYSQL - 创建事件以删除过期的记录

时间:2014-02-05 09:37:56

标签: mysql

我有MYSQL事件的代码:

CREATE EVENT DeleteToken
ON SCHEDULE EVERY 1 MINUTE
DO
BEGIN
DELETE FROM 
`password_recovery` 
WHERE `date_expires` < 
CURRENT_TIMESTAMP();
END

当我运行它时,我收到以下错误:

#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 '' at line 8

date_exiresdatetime,格式为YYYY-MM-DD HH:MM:SS CURRENT_TIMESTAMP()有什么问题。

我也试过CURRENT_TIMESTAMP,但它给了我同样的错误。

5 个答案:

答案 0 :(得分:3)

我建议您使用此查询 -

CREATE EVENT DeleteToken
ON SCHEDULE EVERY 1 MINUTE
DO
DELETE FROM `password_recovery` WHERE `date_expires` < CURRENT_TIMESTAMP();

否则,当您使用BEGIN..END子句时,应使用DELIMITER命令 -

DELIMITER $$
CREATE EVENT DeleteToken
ON SCHEDULE EVERY 1 MINUTE
DO
BEGIN
  DELETE
    FROM `password_recovery`
  WHERE `date_expires` < CURRENT_TIMESTAMP();
END$$
DELIMITER ;

答案 1 :(得分:1)

您需要在查询中设置分隔符:

DELIMITER |

CREATE EVENT
...
CURRENT_TIMESTAMP();
END|

DELIMITER ;

如果您使用phpMyAdmin,请设置分隔符字段,而不是手动设置分隔符。

答案 2 :(得分:0)

只需使用Now()代替CURRENT_TIMESTAMP()

答案 3 :(得分:0)

代替

ON SCHEDULE EVERY 1 MINUTE

尝试

ON SCHEDULE  1 MINUTE

完整的时间表将是这样的:

CREATE EVENT DeleteToken
 ON SCHEDULE 1 MINUTE
 DO
  BEGIN
   DELETE FROM `password_recovery` WHERE `date_expires` < CURRENT_TIMESTAMP();
  END

答案 4 :(得分:0)

尝试使用DELIMITER

DELIMITER $$
CREATE EVENT DeleteToken
ON SCHEDULE EVERY 1 MINUTE
DO
BEGIN
DELETE FROM 
`password_recovery` 
WHERE `date_expires` < 
Now();
END$$
DELIMITER ;