Чтение онлайн

на главную

Жанры

MySQL: руководство профессионала

Паутов Алексей В.

Шрифт:

Имя event_name должно быть допустимым идентификатором MySQL с максимальной длиной в 64 символа. Это может быть разграничено, используя обратные импульсы сигнала времени, и может быть квалифицировано с именем схемы базы данных. Событие связано с пользователем MySQL (definer) и схемой, так что имя должно быть уникальным среди имен событий внутри этой схемы. Вообще, правила, управляющие именами событий, такие же, как для имен сохраненных подпрограмм, поскольку события по сути и являются такими подпрограммами, только особыми.

Если никакая схема не обозначена как часть event_name, то принята заданная по умолчанию схема. Definer всегда текущий пользователь MySQL.

До MySQL 5.1.12 было возможно для двух различных пользователей создать различные события, имеющие то же самое имя в той же самой схеме базы данных.

Обратите внимание: MySQL использует сравнения без учета регистра при прверке уникальности имен события. Это означает, что, например, Вы не можете иметь два события events named myevent и MyEvent в той же самой схеме базы данных.

Функция IF NOT EXISTS с инструкцией CREATE EVENT работает полностью аналогично варианту с CREATE TABLE: если событие event_name уже существует в той же самой схеме, никаких действий не предпринимается, и никакой ошибки не будет. Однако, предупреждение будет сгенерировано.

Предложение ON SCHEDULE определяет, когда, как часто и как долго sql_statement определено для повторения события. Это предложение берет одну из двух форм:

AT timestamp используется для одноразового события. Это определяет, что событие выполняется только однократно, а именно в дату и время, заданные как timestamp, причем надо указать вместе дату и время, либо задать выражение, которое раскрывается в однозначный тип datetime. Вы можете использовать значение, которое имеет тип DATETIME или TIMESTAMP для этой цели. Указанный timestamp должен также быть в будущем. Вы не можете планировать событие, которое должно было произойти в прошлом. Попытка это сделать приведет к ошибке:

mysql> SELECT NOW;

+---------------------+

| NOW |

+---------------------+

| 2006-02-10 23:59:01 |

+---------------------+

1 row in set (0.04 sec)

mysql> CREATE EVENT e_totals

– > ON SCHEDULE AT '2006-02-10 23:59:00'

– > DO INSERT INTO test.totals VALUES (NOW);

ERROR 1522 (HY000): Activation (AT) time is in the past

Инструкции CREATE EVENT, которые являются самостоятельно недопустимыми по любой причине, также завершаются ошибкой.

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

Чтобы создавать событие, которое происходит в некоторой отметке в будущем относительно текущей даты и времени Вы можете использовать факультативное предложение + INTERVAL interval. Часть interval состоит из двух кусков: количества и модуля времени, и следует тем же самым правилам синтаксиса, которые управляют интервалами, используемыми в функции DATE_ADD. Ключевые слова модулей также те же самые за исключением того, что Вы не можете использовать любые модули, включающие микросекунды, при определении события.

Вы можете также объединять интервалы. Например, AT CURRENT_TIMESTAMP + INTERVAL 3 WEEK + INTERVAL 2 DAY эквивалентно "три недели и два дня с этого времени". Каждая часть такого предложения должна начинаться с + INTERVAL.

Для действий, которые должны быть повторены в регулярном интервале, Вы можете использовать предложение EVERY. Ключевое слово EVERY сопровождается интервалом, как описано выше. (+ INTERVAL не используется с EVERY). Например, EVERY 6 WEEK означает "каждые шесть недель".

Невозможно объединить предложения + INTERVAL в одиночном предложении EVERY. Однако, Вы можете использовать те же самые сложные модули времени, позволенные в + INTERVAL. Например, каждые две минуты и десять секунд можно задать как EVERY '2:10' MINUTE_SECOND.

Предложение EVERY может также содержать факультативное предложение STARTS. Оно сопровождается значением timestamp, которое указывает, когда действие должно начать повторяться, и может также использовать + INTERVAL interval, чтобы определить количество времени с этого момента. Например, EVERY 3 MONTH STARTS CURRENT_TIMESTAMP + 1 WEEK означает "каждые три месяца, начиная спустя одну неделю с этого времени". Точно так же Вы можете выражать "каждые две недели, начиная через шесть часов и пятнадцать минут с этого времени" с помощью EVERY 2 WEEK STARTS CURRENT_TIMESTAMP + '6:15' HOUR_MINUTE. Не определение STARTS аналогично STARTS CURRENT_TIMESTAMP, то есть действие, определенное для события, начинает повторяться немедленно после создания события.

Предложение EVERY может также содержать факультативное предложение ENDS. Это ключевое слово сопровождается значением timestamp, которое сообщает MySQL, когда событие должно перестать повторяться. Вы можете также использовать + INTERVAL interval с ENDS. Например: EVERY 12 HOUR STARTS CURRENT_TIMESTAMP + INTERVAL 30 MINUTE ENDS CURRENT_TIMESTAMP + INTERVAL 4 WEEK означает "каждые двенадцать часов, начиная спустя тридцать минут с этого времени, и заканчивая через четыре недели тоже с этого времени". Не использование ENDS означает, что событие продолжает выполняться неопределенно долго.

ENDS поддерживает тот же самый синтаксис для сложных модулей времени, что и STARTS. Вы можете использовать STARTS, ENDS вместе или порознь (либо вовсе не использовать их) в предложении EVERY.

Обратите внимание: где STARTS или ENDS заданы как значение datetime, используется местное время на сервере. Однако, значения для обоих значений в настоящее время сообщены, используя Universal Time в таблицах INFORMATION_SCHEMA.EVENTS и mysql.event, также как в выводе SHOW EVENTS. Это неправильное поведение, и Ваша прикладная программа не должна полагаься на это, поскольку ситуация изменится (Глюк #16420 ).

Предложение ON SCHEDULE может использовать выражения, включающие встроенные функции MySQL и переменные пользователя, чтобы получить любое значение timestamp или interval. Вы не можете использовать сохраненные подпрограммы или определяемые пользователем функции в таких выражениях, и при этом Вы не можете использовать любые ссылки на таблицы, однако, Вы можете SELECT FROM DUAL. Это истинно для инструкций CREATE EVENT и ALTER EVENT. Начиная с MySQL 5.1.13, ссылки на сохраненные подпрограммы, определяемые пользователем функции и таблицы в таких случаях специально отвергнуты и вызывают сбой с ошибкой (Глюк #22830).

Популярные книги

Бывшие. Война в академии магии

Берг Александра
2. Измены
Любовные романы:
любовно-фантастические романы
7.00
рейтинг книги
Бывшие. Война в академии магии

Невеста на откуп

Белецкая Наталья
2. Невеста на откуп
Фантастика:
фэнтези
5.83
рейтинг книги
Невеста на откуп

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Секретарша генерального

Зайцева Мария
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
8.46
рейтинг книги
Секретарша генерального

Мужчина моей судьбы

Ардова Алиса
2. Мужчина не моей мечты
Любовные романы:
любовно-фантастические романы
8.03
рейтинг книги
Мужчина моей судьбы

Возвышение Меркурия. Книга 12

Кронос Александр
12. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 12

Табу на вожделение. Мечта профессора

Сладкова Людмила Викторовна
4. Яд первой любви
Любовные романы:
современные любовные романы
5.58
рейтинг книги
Табу на вожделение. Мечта профессора

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Сын мэра

Рузанова Ольга
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Сын мэра

Ученик. Книга третья

Первухин Андрей Евгеньевич
3. Ученик
Фантастика:
фэнтези
7.64
рейтинг книги
Ученик. Книга третья

Свои чужие

Джокер Ольга
2. Не родные
Любовные романы:
современные любовные романы
6.71
рейтинг книги
Свои чужие

Его огонь горит для меня. Том 2

Муратова Ульяна
2. Мир Карастели
Фантастика:
юмористическая фантастика
5.40
рейтинг книги
Его огонь горит для меня. Том 2

Убивать чтобы жить 2

Бор Жорж
2. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 2