2014-02-05 3 views
0

У меня есть этот код для 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_exires является datetime с форматом YYYY-MM-DD HH:MM:SS Что не так с CURRENT_TIMESTAMP().

Я пробовал также CURRENT_TIMESTAMP, но он дает мне такую ​​же ошибку.

ответ

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 ; 
+0

Работает :). (не знал о DELIMITER $$) Спасибо за вашу помощь :) – Sasha

0

Просто используйте Now() вместо CURRENT_TIMESTAMP()

+0

Все еще ничего - сообщается та же ошибка. – Sasha

0

вместо

ON SCHEDULE EVERY 1 MINUTE 

попробовать

ON SCHEDULE 1 MINUTE 

Полная schecule Виль так:

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

Когда я попытался изменить, у меня появилась новая ошибка. Кажется, что КАЖДЫЙ 1 МИНУТ нужно писать так. – Sasha

1

Вы должны установить разделитель в запросе :

DELIMITER | 

CREATE EVENT 
... 
CURRENT_TIMESTAMP(); 
END| 

DELIMITER ; 

Если вы используете PhpMyAdmin, установите в поле разделитель вместо установки разделителя вручную.

0

попробуйте использовать DELIMITER

DELIMITER $$ 
CREATE EVENT DeleteToken 
ON SCHEDULE EVERY 1 MINUTE 
DO 
BEGIN 
DELETE FROM 
`password_recovery` 
WHERE `date_expires` < 
Now(); 
END$$ 
DELIMITER ; 
Смежные вопросы