Расписание обновления с конкретными новыми данными в таблице MySQL - PullRequest
0 голосов
/ 23 октября 2018

Мне интересно, есть ли способ запланировать обновление, где я обновляю данные таблиц по истечении срока действия старой.

Например, Джон Смит имеет активную службу в компании X, но хочет обновить службу.Однако из-за ограничений его действующего соглашения новая услуга вступает в силу только через X дней.

Есть ли способ сохранить новые данные и обновить их в конце месяца в MySQL?Если да, потребуется ли мне иметь другую таблицу с новыми данными заказа?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Часто это требование для изменения вещей в будущем выполняется путем размещения столбцов start_date и end_date в вашей таблице services.

Затем вы можете найти текущие активные сервисные строки с помощью

   SELECT user_id, whatever, whatelse
     FROM services
    WHERE (start_date IS NULL OR start_date <= NOW())
      AND (end_date IS NULL OR end_date > NOW());

. При желании вы можете создать представление с именем active_services, автоматически фильтрующее таблицу services для текущих активных сервисов.

 CREATE VIEW active_services AS
   SELECT *
     FROM services
    WHERE (start_date IS NULL OR start_date <= NOW())
      AND (end_date IS NULL OR end_date > NOW());

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

Чтобы изменить службу или user_id в начале следующего месяца, выполните следующие две операции:

  UPDATE service
     SET end_date = LAST_DAY(NOW()) + INTERVAL 1 DAY
   WHERE user_id = <<user id you wish to change >>

  INSERT INTO service (start_date, user_id, whatever, whatelse)
          VALUES (LAST_DAY(NOW()) + INTERVAL 1 DAY,
                  <<user id you wish to change >>,
                  <<whatever>>, 
                  <<whatelse>>;

Затем,когда наступит следующий месяц, представление active_services вернет новую услугу.Это гораздо надежнее, чем полагаться на точно рассчитанную месячную работу.Если вы делаете ежемесячную работу, она может работать в любое время.Он просто очищает просроченные сервисы.

Вы можете использовать события MySQL для запуска определенных заданий в назначенное время.(Но некоторые общие системы MySQL не позволяют вам использовать события.)

0 голосов
/ 23 октября 2018

Интересно, что в mysql есть планировщики событий, которые просматривают документацию .

ниже приведен пример минимального оператора CREATE EVENT:

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR
DO
  UPDATE myschema.mytable SET mycol = mycol + 1;

Предыдущий оператор создает событие с именем myevent.Это событие выполняется один раз - через час после его создания - с помощью оператора SQL, который увеличивает значение столбца mycol таблицы myschema.mytable на 1.

Если да, потребуется ли для этого другойтаблица с сохраненными новыми данными заказа

Я не уверен, нужна ли вам другая таблица или около того ... это зависит только от того, как вы хотите, чтобы она была одна

...