mysql事件(event)


【小結】簡單案例

SET GLOBAL event_scheduler=1
delimiter $$
create definer = current_user event `test`.`event_table1` on schedule every 5 second -- 每隔5秒中就向 `table1` 插入當前時間 on completion preserve enable comment '每隔5秒中就向 `table1` 插入當前時間的事件' do begin insert into `table1` values(null, now()); end$$ delimiter ; -- 引用自:https://blog.csdn.net/qq_34845394/article/details/90038250

 

【0】正文
MySQL中的事件(event)是用於執行定時或周期性的任務,類似Linux中的crontab,但是后者只能精確到分鍾,事件可以精確到秒。

  既然MySQL自身能實現定時性任務,那么就不必在應用層實現了。事件由一個特定的線程來管理的,也就是所謂的事件調度器,但是事件不能直接調用。

  MySQL中調度器event_scheduler負責調用事件,也就是由全局變量event_scheduler的狀態決定,它默認是OFF, 一般是OFF

show variables like '%event_scheduler%';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| event_scheduler | OFF |
+-----------------+-------+

打開的方法:SET GLOBAL event_scheduler=1,關閉當然就是賦值為0了。

 

創建事件的語法:

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 }

 

event_name:創建的event名字(唯一確定的)。
ON SCHEDULE:計划任務。
schedule: 決定event的執行時間和頻率(注意時間一定要是將來的時間,過去的時間會出錯),有兩種形式AT和EVERY。
[ON COMPLETION [NOT] PRESERVE]: 可選項,默認是ON COMPLETION NOT PRESERVE 即計划任務執行完畢后自動drop該事件;ON COMPLETION PRESERVE則不會drop掉。
[COMMENT ‘comment’] :可選項,comment 用來描述event;相當注釋,最大長度64個字節。
[ENABLE | DISABLE] :設定event的狀態,默認ENABLE:表示系統嘗試執行這個事件。DISABLE:關閉該事情,可以用alter修改
DO event_body: 需要執行的sql語句(可以是復合語句)。
每分鍾插入到表中數據:

create event test.event_minute on schedule every 1 minute
do insert into events_list values('event_now', now());

從2017年的給定時間起,每過一年調用一次存儲過程ClearHis(2):

CREATE EVENT `e_ClearHis` ON SCHEDULE EVERY 1 YEAR STARTS '2017-03-07 02:00:00'
ON COMPLETION PRESERVE ENABLE 
DO call ClearHis(2);

查看當前所在庫的事件:

show events;

可以修改事件,不必刪除再創建,例如修改第一個例子為30秒間隔:

alter event test.event_minute
on schedule 
every 30 second 
do insert into events_list values('event_now', now());

 



修改上面例子為不活動和再次活動

alter event test.event_second disable;
alter event test.event_second enable;

 

刪除事件

DROP EVENT [IF EXISTS] event_name

 

————————————————
版權聲明:本文為CSDN博主「SilentAssassin」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yao5hed/article/details/81059864


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM