#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.