事件(event)是MySQL在相應的時刻調用的過程式數據庫對象。一個事件可調用一次,也可周期性的啟動,它由一個特定的線程來管理的,也就是所謂的“事件調度器”。
事件和觸發器類似,都是在某些事情發生的時候啟動。當數據庫上啟動一條語句的時候,觸發器就啟動了,而事件是根據調度事件來啟動的。由於他們彼此相似,所以事件也稱為臨時性觸發器。
事件取代了原先只能由操作系統的計划任務來執行的工作,而且MySQL的事件調度器可以精確到每秒鍾執行一個任務,而操作系統的計划任務(如:Linux下的CRON或Windows下的任務計划)只能精確到每分鍾執行一次。
2 事件的優缺點
2.1 優點
一些對數據定時性操作不再依賴外部程序,而直接使用數據庫本身提供的功能。
可以實現每秒鍾執行一個任務,這在一些對實時性要求較高的環境下就非常實用了。
2.2 缺點
定時觸發,不可以調用。
3 事件創建
一條create event語句創建一個事件。每個事件由兩個主要部分組成,第一部分是事件調度(event schedule),表示事件何時啟動以及按什么頻率啟動,第二部分是事件動作(event action ),這是事件啟動時執行的代碼,事件的動作包含一條SQL語句,它可能是一個簡單地insert或者update語句,也可以使一個存儲過程或者benin...end語句塊,這兩種情況允許我們執行多條SQL。
一個事件可以是活動(打開)的或停止(關閉)的,活動意味着事件調度器檢查事件動作是否必須調用,停止意味着事件的聲明存儲在目錄中,但調度器不會檢查它是否應該調用。在一個事件創建之后,它立即變為活動的,一個活動的事件可以執行一次或者多次。
一、 如果開啟事件
在使用事件這個功能,首先要保證你的mysql的版本是5.1以上,然后還要查看你的mysql服務器上的事件是否開啟。
查看事件是否開啟,使用如下命令查看:
SHOW VARIABLES LIKE 'event_scheduler';
通過動態參數修改 SET GLOBAL event_scheduler = ON;
更改完這個參數就立刻生效了 注意:還是要在my.ini 中添加event_scheduler=ON。因為如果沒有添加的話,mysql重啟事件又會回到原來的狀態了。
創建語句方式:
create event [ if not exists ] EVENT_NAME
on schedule SCHEDULE
[ on completion [ not ] preserve ] //not即計划任務執行完畢后自動刪除該事件,默認操作。
[ enable | disable ]
[ comment COMMENT ]
do SQL;
注釋:所有中括號([])中的內容為可寫選項(下同)
EVENT_NAME:你自己想要設置的事件名稱
SCHEDULE : 方式一: at TIMESTAMP(必須是'2017-09-11 17 :00:00' 這種格式)
方式二: every INTERVAL(整數值) UNIT(時間單位,可以是:YEAR | QUARTER | MONTH | DAY | HOUR| MINUTE |WEEK | SECOND | YEAR_MONTH |DAY_HOUR |DAY_MINUTE|DAY_SECOND| HOUR_MINUTE |HOUR_SECOND| MINUTE_SECOND)
[ starts TIMESTAMP(同上) [ + interval(必須寫) INTERVAL(整數值) UNIT(同上) ] ]
[ ends TIMESTAMP(同上) [ + interval(必須寫) INTERVAL(整數值) UNIT(同上) ] ]
COMMENT:填寫的注釋,utf8字符集時不能是中文。長度也不能超過64個字節。
SQL:需要執行的sql語句。(可以是存儲過程)
注意:
通過show events只能查看當前庫中創建的事件
事件執行完即釋放,如立即執行事件,執行完后,事件便自動刪除,多次調用事件或等待執行事件可以查看到。
如果兩個事件需要在同一時刻調用,mysql會確定調用他們的順序,如果要指定順序,需要確保一個事件至少在另一個事件1秒后執行
對於遞歸調度的事件,結束日期不能在開始日期之前。
select可以包含在一個事件中,然而他的結果消失了,就好像沒執行過。
4 事件修改
更改事件的語法
ALTER
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]
注意:這里的大寫是必須這么寫的,小寫同創建的代名詞一樣。
5 事件刪除
DROP EVENT [IF EXISTS] event_name(代名詞)