事件計劃是mysql中的對象,其中的sql語句會由通過特定時間段來觸發。按照官方文檔上的說明,這個概念與'時間觸發器(temperal trigger)'是有區別的。從根本上來講evnet scheduler是對特定時間段的響應,而trigger是對特定表上發生的特定事件的響應。
事件計劃在sql標準中並無定義,可是在其餘數據庫中能夠看到相似的概念。mysql中的事件有一下一些主要的特徵:
1. mysql中的事件由名稱和其所處的數據庫惟一肯定
2. mysql中的事件是按照時間表運行的動做。動做的定義若是有須要能夠使用複合語句begin...end。事件的時間能夠是一次性的,也能夠是週期性的。週期性的事件能夠定義開始日期時間,結束日期時間。默認的程序從建立完成開始週期性運行,不會自動結束,直到該程序被禁用或者刪除。若是在一個週期內程序沒有正常運行結束,會在同一時間有幾個程序實例運行。
3. 用戶能用sql語句建立,修改和刪除事件,事件中如有語法問題,mysql會報錯。
4. 事件的性質能夠用sql語句來設置和修改,這些性質包括:事件名,時間, 過時後是否保留, 狀態, 執行的動做, 所在數據庫。(alter event)
5. 事件動做能夠包含存儲過程,函數,觸發器中的大部分語句。mysql
1 建立sql
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 event_body; 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}
示例:數據庫
## 建立一次性計劃 REATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR DO UPDATE myschema.mytable SET mycol = mycol + 1; ## 週期性計劃 CREATE EVENT e_hourly ON SCHEDULE EVERY 1 HOUR COMMENT 'Clears out sessions table each hour.' DO DELETE FROM site_activity.sessions;
2 修改session
ALTER [DEFINER = { user | CURRENT_USER }] EVENT event_name [ON SCHEDULE schedule] [ON COMPLETION [NOT] PRESERVE] [RENAME TO new_event_name] [ENABLE | DISABLE | DISABLE ON SLAVE] [COMMENT 'comment'] [DO event_body]
3 刪除函數
DROP EVENT [IF EXISTS] event_name