1. 程式人生 > >MySQL 事件EVENT

MySQL 事件EVENT

events 顯示 value str mit st2 增加 drop let

一.用途
用於某一時間執行一個事件或周期性執行一個事件.


二.語法
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}


a.event_name表示事件的名稱
b.schedule表示觸發點,【AT timestamp】一般用於只執行一次,一般使用時可以使用當前時間加上延後的一段時間,例如:AT CURRENT_TIMESTAMP + INTERVAL 1 HOUR。也可以定義一個時間常量,例如:AT ‘2006-02-10 23:59:00‘;【EVERY interval】一般用於周期性執行,可以設定開始時間和結束時間。
c.ON COMPLETION [NOT] PRESERVE,默認是事件到期後會自動刪除。如果想保留該事件使用ON COMPLETION PRESERVE;如果不想保留也可以設置ON COMPLETION [NOT] PRESERVE。
d.ENABLE | DISABLE表示設置啟用或者禁止這個事件。
e.COMMENT 表示增加註釋。


三.EVENT開啟
msyql默認關閉了event.
show global variables like ‘%event%‘;
顯示:
event_scheduler OFF

開啟:
set global event_scheduler=ON(或1);

查看進程:
show PROCESSLIST;

會看到一個用戶為event_scheduler,執行狀態為Waiting on empty queue的進程


四.示例
1.每秒向test2插入一條數據
DELIMITER //
CREATE EVENT test2_insert ON SCHEDULE EVERY 1 SECOND
DO
BEGIN
INSERT test2(uid) VALUES(10);
END;
//


2.每今日0點開始,每5分鐘向test2插入一條數據
DELIMITER //
CREATE EVENT test2_insert_5_minute ON SCHEDULE EVERY 5 MINUTE STARTS CURDATE()
DO
BEGIN
INSERT test2(`time`) VALUES(NOW());
END;
//

對於手動更改日期,比如將當前事件18:08:05改為19:09:55,實際插入的記錄會被延遲,本來應該在19:10:00插入的記錄,可能會延後到19:10:50

五.查看和刪除事件
show events;
show create EVENT test2_insert_5_minute;

drop event test2_insert_5_minute;

MySQL 事件EVENT