MySQL的event

event

在linux中我們可以使用at或者crontab實現計劃任務和週期性任務,那麼在mysql中如何實現呢?

在mysql中使用event對象可以實現以下兩種需求
(1)在12點鐘,執行一個begin and
(2)從12點開始,每隔一個小時,執行一個begin and

1.event對象
調度分爲兩種:一種是執行一次的,一種是週期性的
對於週期性的調度,我們可以指定週期的開始,週期的結束,每隔多長時間(每分鐘,每秒,每天,每個季度,每週),一般我們都指定週期的開始和每隔多長時間,週期的結束一般不指定;沒有指定週期的開始,就是從現在開始,沒有定義週期的結束,就是永遠都不結束;每隔多長時間必須指定

2.event語法:

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}

釋義:AT timestamp [+ INTERVAL interval] …表示一個時間加上一個時間間隔,是固定的時間點

  • INTERVAL 1:5 YEAR_MONTH表示爲1年5個月

3.event的開關
要想使event生效,必須將參數打開
(1)set global event_scheduler =1;
(2)重啓
(3)mysql> show variables like ‘%event_scheduler%’;
±----------------±------+
| Variable_name | Value |
±----------------±------+
| event_scheduler | ON | ##on說明打開
±----------------±------+

4.通過示例深入瞭解event

示例:需求是每隔一分鐘插入數據
create table t2(id int auto_increment primary key,t_time datetime);

delimiter $$

CREATE EVENT e_daily
ON SCHEDULE
EVERY 1 MINUTE ##執行的時間,當前是每隔一分鐘
COMMENT ‘Saves total number of sessions then clears the table each day’
DO
BEGIN
INSERT INTO t2 values (null,current_timestamp); ##執行的計劃是什麼
END $$

delimiter ;

mysql> select EVENT_NAME,LAST_EXECUTED from information_schema.EVENTS;
±-----------±--------------------+
| EVENT_NAME | LAST_EXECUTED |
±-----------±--------------------+
| e_daily | 2016-01-17 18:53:09 |
±-----------±--------------------+
1 row in set (0.00 sec)

示例2:需求是一分鐘後執行一個更新語句,執行一次就可以
delimiter $$

CREATE EVENT myevent
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE ##當前時間加上一分鐘
DO
begin
UPDATE t1 SET mycol = mycol + 1; ##將t1表中的mycol列的數據加1
end$$

delimiter ;

show events; ##將events的詳細信息顯示出來

/var/log/mysqld.log (或者是/usr/local/mysql/data/mysqld.log) ##可以查看mysql的日誌文件, 來獲取event的執行情況
2016-01-17T10:40:52.018009Z 10 [Note] Event Scheduler: scheduler thread started with id 10
補充:使用tail -f 可以動態查看文件末尾的內容

5.補充event
mysql> select EVENT_NAME,LAST_EXECUTED from information_schema.EVENTS;
語句釋義:可以看到定義的event最後一次執行的時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章