Добавление дней к ежемесячным событиям в MySQL

#mysql

#mysql

Вопрос:

 DELIMETER $$
CREATE EVENT loan_balance ON SCHEDULE EVERY  '1' MONTH AND '5' DAYS 
DO BEGIN UPDATE users SET loan_balance = total_loans_collected - 
total_loans_paid;
END$$
DELIMETER;
  

Здравствуйте! Я хочу обновлять эту таблицу 5 числа каждого месяца, а не только ежемесячно. ДНИ «И «5» не заставляют это работать.

Комментарии:

1. Зачем вам нужен именно этот код? Вы могли бы просто создать сгенерированный столбец или представление для этого.

2. 5-е число каждого месяца — это дата, когда обычно производятся вычеты.

Ответ №1:

Вам нужна немного другая ON SCHEDULE фраза.

  AT '2018-04-01 03:01'   INTERVAL 5 DAY EVERY MONTH
  

запускает ваше событие в 03:01 по местному времени пятого числа каждого месяца.

03:01 это подходящее время для запланированного задания, потому что оно не портится переключениями на стандартное / дневное время.

Комментарии:

1. Очень близко к тому, что я хочу, но он отображает синтаксическую ошибку почти КАЖДЫЙ МЕСЯЦ. Какие-либо корректировки?

Ответ №2:

Вместо использования триггера для обновления loan_balance столбца, вы можете превратить его в сгенерированный столбец.

 ALTER TABLE users MODIFY COLUMN loan_balance INT GENERATED ALWAYS AS
(total_loans_collected - total_loans_paid) STORED;
  

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