2015-07-06 4 views
1

Что не так с этим триггером MySQL? После вставки я пытаюсь удалить строки старше 1 месяца. Этот триггер только удаляет последнюю вставленную строку.MySQL триггер DELETE старые строки AFTER INSERT

CREATE TRIGGER `users_logins_delete_olds` 
AFTER INSERT ON `users_logins` FOR EACH ROW 
BEGIN 
    DELETE FROM users_logins WHERE user_id = new.user_id AND timestamp < (NOW() - INTERVAL 1 MONTH); 
END 
+0

Каков тип данных 'timestamp'? –

+0

@GordonLinoff Это 'DATETIME', как 0000-00-00 00:00:00. – lingo

ответ

3

Вы не можете удалять строки из той же таблицы, на которой вы реализуете на спусковой крючок. Потому что на вставке mysql блокирует таблицу и не может удалить строки, потому что delete требует блокировки, поэтому ее блокировка блокировки, вот почему mysql не допустил этого.

+0

Я также пытался создать событие, но даже это не сработало. @AmanAggarwal – lingo

+0

да, вы не можете, потому что это также требует блокировки. –

+0

его лучше создать небольшую процедуру и запустить ее по коду при вставке данных в таблицу. –

0

попробовать DATE_SUB (NOW(), ИНТЕРВАЛ 1 МЕСЯЦ)

+0

Я изменил timestamp <(NOW() - INTERVAL 1 MONTH) 'to timestamp lingo

Смежные вопросы