Спрятать колонку

событие

MySql. События

Часто необходимо планировать действия, которые должны происходить с СУБД с определенным интервалом времени. К примеру, это может быть очистка временных таблиц, удаление старых логов и т.д. Раньше для этого необходимо было писать cron job, добавить его вызов (если хостер предоставляет такую возможность, а если нет). Много мороки получается. Начиная с MySql 5.1 все станет немного проще. В распоряжении разработчика теперь имеется оператор CREATE EVENT

CREATE 
    [DEFINER = { USER | CURRENT_USER }]
    EVENT 
    [IF NOT EXISTS]
    event_name    
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'comment']
    DO sql_statement;
 
schedule:
    AT TIMESTAMP [+ INTERVAL INTERVAL] ...
  | EVERY INTERVAL 
    [STARTS TIMESTAMP [+ INTERVAL INTERVAL] ...] 
    [ENDS TIMESTAMP [+ INTERVAL INTERVAL] ...]
 
INTERVAL:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

Хорошей практикой при этом является инкапсуляция действий в функцию и вызов непосредственно ее. К примеру:

CREATE EVENT delete_trash 
   ON SCHEDULE 
   EVERY 1 DAY
   COMMENT 'This function deletes trash'
DO
   CALL del_trash;

Данное событие будет вызываться раз в сутки и выполнять фукнцию del_trash.
Для того, чтобы подобные вызовы могли осуществляться, необходимо в файле конфигурации или с помощью команды SET разрешить выполняться потоку, в котором будут запускаться события:

SET GLOBAL event_scheduler := 1;

>> Читать далее
RSS-материал

Наверх