Larave mysql removes old records

Подскаите, хочу установить триггер на таблицу.

     BEGIN
              DELETE FROM dashboard_statistics WHERE user_id = new.user_id AND 
     created_at < (NOW() - INTERVAL 90 DAY);
                                END

Вставке sql запроса.

  insert into `dashboard_statistics` (`user_id`, 
  `data_visualizations`, `attribute`, `total`, `updated_at`, 
 `created_at`) values (6, 'matches', 'email', total + 1, '2022- 
 05-31 13:01:04', '2022-05-31 13:01:04')

Ошибку которую получаю.

 General error: 1442 Can't update table 'dashboard_statistics' in stored  
 function/trigger because it is already used by statement which invoked this stored  
 function/trigger.

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


Ответы (1 шт):

Автор решения: Akina

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

CREATE EVENT remove_old_rows_from_dashboard_statistics 
ON SCHEDULE 
    EVERY 1 DAY
    STARTS '2022-01-01'
DO
DELETE 
FROM dashboard_statistics 
WHERE created_at < CURRENT_DATE - INTERVAL 90 DAY;

Само собой Event Scheduler надо не забыть включить - event_scheduler = ON в файле конфигурации или опцией в командной строке сервиса.

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

→ Ссылка