Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«MySQL: руководство профСссионала». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 39

Автор АлСксСй ΠŸΠ°ΡƒΡ‚ΠΎΠ²

Π”ΠΎ MySQL 5.1.11 event_scheduler ΠΌΠΎΠ³ Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ ΠΈΠ· 2 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ: 0|OFF (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) ΠΈΠ»ΠΈ 1|ON Π±Π΅Π· пСрСзапуска сСрвСра.

MySQL 5.1.6 ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ обСспСчиваСт Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ EVENTS Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… INFORMATION_SCHEMA. Π­Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ запрос ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… событий, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° сСрвСрС.

8.2. Бинтаксис ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ° событий

MySQL 5.1.6 ΠΈ ΠΏΠΎΠ·ΠΆΠ΅ обСспСчиваСт нСсколько инструкций SQL для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌΠΈ событиями:


НовыС события ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ CREATE EVENT.


ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ события ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ посрСдством инструкции ALTER EVENT.


Когда ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ событиС большС Π½Π΅ трСбуСтся, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ с сСрвСра использованиСм инструкции DROP EVENT. БохраняСтся Π»ΠΈ событиС послС ΠΊΠΎΠ½Ρ†Π° ΠΏΠ»Π°Π½Π°, Ρ‚Π°ΠΊΠΆΠ΅ зависит ΠΎΡ‚ прСдлоТСния ON COMPLETION, Ссли ΠΎΠ½ΠΎ имССтся.

Π‘ΠΎΠ±Ρ‹Ρ‚ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡŽ EVENT для Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ событиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ. Π”ΠΎ MySQL 5.12 ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ создавал это событиС, Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Π΅ mysql.event.

8.2.1. Бинтаксис CREATE EVENT

CREATE EVENT [IF NOT EXISTS] event_name

ON SCHEDULE schedule

[ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE]

[COMMENT 'comment']

DO sql_statement;


schedule:

AT timestamp [+ INTERVAL interval]

| EVERY interval [STARTS timestamp]

[ENDS timestamp]


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 ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:


ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова CREATE EVENT плюс имя события, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ событиС Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ схСмС.

Π”ΠΎ MySQL 5.1.12 имя события Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСди событий, созданных Ρ‚Π΅ΠΌ ΠΆΠ΅ самым ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² этой Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ….


ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ON SCHEDULE, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ опрСдСляСт, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ часто событиС выполняСтся.


ΠŸΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ DO, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ содСрТит ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ SQL, которая Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° событиСм.

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ минимальной инструкцииCREATE EVENT myevent

ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR

DO UPDATE myschema.mytable SET mycol = mycol + 1;


ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ инструкция создаСт событиС myevent. Π­Ρ‚ΠΎ событиС выполняСтся ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· Π² час послС создания, выполняя ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ SQL, которая ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбца mycol Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ myschema.mytable Π½Π° 1.

Имя 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).

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ событиС истСкло, ΠΎΠ½ΠΎ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ уничтоТаСтся. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΌΠ΅Π½ΡΡ‚ΡŒ это ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, опрСдСляя ON COMPLETION PRESERVE. ИспользованиС ON COMPLETION NOT PRESERVE просто Π΄Π΅Π»Π°Π΅Ρ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ явным.