2014-01-13 2 views
0
DELIMITER | 

CREATE EVENT myevent 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
    DO 
     BEGIN 
     DELETE FROM vehicle WHERE last_updated < (NOW() - INTERVAL 5 MINUTE) 
     END | 

DELIMITER ; 

У меня есть событие MySQL, которое выполняется каждую минуту, удаляя строки, которые не обновлялись в течение 5 минут. У меня есть другая таблица с именем saved_vehicles. Все строки в vehicle будут иметь строку в таблице saved_vehicle. То, что я хочу сделать, это по существу скопирует last_updated времени в saved_vehicle таблицу (для примера, представьте saved_vehicle поля будет last_known_online_time. Это существенно экономит копию автомобиля с последним известным временем онлайн.Переменные событий MySQL - копировать значение в другую таблицу

По существу я создает резервную копию перед удалением строки

ответ

0

Вставить в saved_vehicles, прежде чем удалить Попробуйте это:..

DELIMITER | 

CREATE EVENT myevent 
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE 
    DO 
     BEGIN 
     SET @time = NOW() - INTERVAL 5 MINUTE; 

      # select * is not very smart, it will also copy your primary key, 
      # so you can get error about duplicates. Listing fields would work here. 
     INSERT INTO saved_vehicle (SELECT * FROM vehicle WHERE last_updated < @time); 
     DELETE FROM vehicle WHERE last_updated < @time; 

     END | 

DELIMITER ; 

чтобы избежать перечислений полей, которые я упомянул в комментариях пытаются выбрать все поля, кроме первичного ключа колонка. Для этой проверки how to select all columns except one

обновление
Я через о вставки я упоминал выше - и если ваша saved_vehicle таблица имеет такую ​​же структуру, как vehicle таблицы, но ее первичный ключ имеет другое имя, чем vehicle (Fe base_id, когда vehicle PK - id) и его int auto_increment, тогда он будет работать хорошо, как есть.

+0

ошибка, пронзившая код, проверка обновления – michalczukm

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