Обзор событий
События — это именованные объекты базы данных, содержащие SQL-запросы, которые должны быть выполнены впоследствии, либо один раз, либо через определённые интервалы.
Они функционируют очень похоже на планировщик задач Windows или задачи cron в Unix.
Для создания, изменения или удаления событий требуется привилегия EVENT.
Создание событий
События создаются с помощью оператора CREATE EVENT.
Пример
CREATE EVENT test_event ON SCHEDULE EVERY 1 MINUTE DO UPDATE test.t1 SET a = a + 1;
Выполнение событий
События выполняются только в том случае, если планировщик событий запущен. Это определяется значением системной переменной event_scheduler, которая должна быть установлена в значение On для запуска планировщика событий.
Вы можете проверить, запущен ли планировщик событий с помощью:
SHOW PROCESSLIST; +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+ | Id | User | Host | db | Command | Time | State | Info | Progress | +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+ | 40 | root | localhost | test | Sleep | 4687 | | NULL | 0.000 | | 41 | root | localhost | test | Query | 0 | init | SHOW PROCESSLIST | 0.000 | | 42 | event_scheduler | localhost | NULL | Daemon | 30 | Waiting for next activation | NULL | 0.000 | +----+-----------------+-----------+------+---------+------+-----------------------------+------------------+----------+
Если планировщик событий не запущен и event_scheduler установлено в значение OFF, используйте:
SET GLOBAL event_scheduler = ON;
чтобы его активировать. Если event_scheduler установлено в значение Disabled, вы не можете изменить его значение во время выполнения. Для изменения значения переменной event_scheduler требуется привилегия SUPER.
Начиная с MariaDB 10.0.22, установка системной переменной event_scheduler также попытается перезагрузить таблицу mysql.event, если она не была правильно загружена при запуске.
Просмотр текущих событий
Список текущих событий можно получить с помощью оператора SHOW EVENTS. Это отображает только имя события и интервал — полные подробности события, включая SQL, можно увидеть, выполнив запрос к таблице Information Schema EVENTS или с помощью SHOW CREATE EVENT.
Если событие выполняется в настоящее время, его можно увидеть, выполнив запрос к таблице Information Schema PROCESSLIST или с помощью оператора SHOW PROCESSLIST.
Пример
SHOW EVENTS\G;
*************************** 1. row ***************************
Db: test
Name: test_event
Definer: root@localhost
Time zone: SYSTEM
Type: RECURRING
Execute at: NULL
Interval value: 1
Interval field: MINUTE
Starts: 2013-05-20 13:46:56
Ends: NULL
Status: ENABLED
Originator: 1
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
SHOW CREATE EVENT test_event\G
*************************** 1. row ***************************
Event: test_event
sql_mode:
time_zone: SYSTEM
Create Event: CREATE DEFINER=`root`@`localhost` EVENT `test_event` ON SCHEDULE EVERY 1 MINUTE STARTS '2013-05-20 13:46:56' ON COMPLETION NOT PRESERVE ENABLE DO UPDATE test.t1 SET a = a + 1
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
Изменение событий
Событие можно изменить с помощью оператора ALTER EVENT.
Пример
ALTER EVENT test_event ON SCHEDULE EVERY '2:3' DAY_HOUR;
Удаление событий
События удаляются с помощью оператора DROP EVENT. События также автоматически удаляются после их завершения в соответствии с расписанием, если не был указан оператор ON COMPLETION PRESERVE.
Пример
DROP EVENT test_event; Query OK, 0 rows affected (0.00 sec)
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/events/