Код для удаления строк по полю с истекшей датой в MySQL с использованием триггеров?

#mysql #database #triggers

#mysql #База данных #триггеры

Вопрос:

Мне нужно удалять строки из базы данных MySQL всякий раз, когда поле в любой строке истекает срок действия, в этом случае оно старше, чем сегодня. Я нахожусь в учетной записи общего хостинга с отключенными событиями и отказом в разрешениях для cronjobs. Мой хост дал разрешение на это с помощью триггера, но я не знаю, какой код использовать (даже после поиска в Google). Любой пример кода, которым кто-нибудь может поделиться? Кроме того, что входит в поле определения и что входит в поле определителя?

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

1. Триггер запускается при выполнении инструкции, а не в запланированное время. Вам все еще нужно задание cron или какой-либо другой триггер для его вызова. О скольких строках мы здесь говорим?

2. Вероятно, всего будет около 500 строк для проверки с любым числом, подлежащим удалению, в зависимости от даты истечения срока действия.

Ответ №1:

Разрешено ли вам создавать события MySQL? Тогда вы можете использовать что-то вроде этого:

 CREATE EVENT removeold_hourly
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Remove items before today'
    DO
      DELETE FROM mytable WHERE col < CURDATE();
  

Это приведет к удалению всех строк из mytable, где col < сегодня. Эта проверка будет выполняться каждый час.

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

1. Привет, Нильс, спасибо за ответ. Согласно моему хосту, события отключены….. Они позволили мне использовать триггер для удаления просроченных rows….so Мне просто нужно знать, что поместить в поле «Определение» и в поле «Определитель»….. Также я хочу, чтобы это происходило один раз в день в полночь.

2. Используя только триггеры, вы не сможете этого сделать. Вы можете проверить это при вставке других строк. Так что, если у вас много вставок, или обновление (количество пользователей), или что-то в этом роде. Вы можете выполнить запрос для удаления старых строк.

Ответ №2:

Поле определения должно содержать SQL-запрос, который вы собираетесь запустить. DELETE FROM mytable where col < CURDATE()

Поле определения указывает

учетная запись MySQL, которая будет использоваться при проверке прав доступа во время активации триггера. Если задано значение пользователя, это должна быть учетная запись MySQL, указанная как ‘имя_пользователя’@’host_name’ (тот же формат, который используется в инструкции GRANT), CURRENT_USER или CURRENT_USER(). Значением определителя по умолчанию является пользователь, который выполняет инструкцию CREATE TRIGGER. Это то же самое, что явно указывать DEFINER = CURRENT_USER.

https://www.w3resource.com/mysql/mysql-triggers.php