MySQL事件排程器Event Scheduler

2021-06-19 22:11:56 字數 4587 閱讀 3541

資料庫中經常有需要定時執行一些相關的任務的需求,在mssql中sql agnet,在mysql5.1以前,一般需要通過os的排程計畫(windows的計畫任務和linux的crontab)來實現,mysql5.1以後增加了乙個事件排程器,可以實現定時排程的功能。

一、使用許可權

單獨使用event呼叫sql語句時,檢視和建立需要使用者具有event許可權,呼叫該sql語句時,需要使用者具有執行該sql的許可權。event許可權的設定儲存在mysql.user表和mysql.db表的event_priv欄位中。

當event和procedure配合使用的時候,檢視和建立儲存過程需要使用者具有create routine許可權,呼叫儲存過程執行時需要使用excute許可權,儲存過程呼叫具體的sql語句時,需要使用者具有執行該sql的許可權

某個使用者建立的event ,在該使用者被刪除後,將無法繼續執行,event的定義使用者名稱在information_schema.events表的definer欄位中。

二、啟用event scheduler

檢視當前是否已啟用event scheduler的方法:

1)     show variables like 'event_scheduler';

2)     select @@event_scheduler;

3)     show processlist;

啟用event scheduler的方法如下

:1)     set global event_scheduler = 1 / on;

2)     set @@global.event_scheduler = 1 / on;鍵值1

或者on

表示開啟;0或者

off表示關閉;

以上命令都是即時生效的,無需重啟服務

開啟事件計畫以後,可以通過

showprocesslist\g

看到有乙個相應的常駐程序:

三、建立event

建立event的語法如下:

delimiter $$

-- set global event_scheduler = on$$     -- required for event to execute but not create    

create/*[definer = ]*/event `event_schema`.`event_name`

on schedule

/* uncomment the example below you want to use */

-- scheduleexample 1: run once

--  at 'yyyy-mm-dd hh:mm.ss'/current_timestamp

-- scheduleexample 2: run at intervals forever after creation

-- every 1 [hour|month|week|day|minute|...]

-- scheduleexample 3: specified start time, end time and interval for execution

/*every 1  [hour|month|week|day|minute|...]

starts current_timestamp/'yyyy-mm-dd hh:mm.ss'

ends current_timestamp/'yyyy-mm-dd hh:mm.ss' */

/*[on completion [not] preserve]

[enable | disable]

[comment 'comment']*/

dobegin

(sql_statements)

end$$

delimiter ;

說明

event_schema:資料庫名稱

event_name :event名稱(event_schema.event_name 須唯一);

schedule有兩種形式 at和every

at 時間戳,單次任務

every,用來完成重複的計畫任務。

如果指定了[starts 時間戳] [ends時間戳],則是在指定的限期內,根據interval重複執行計畫任務。

如果未指定則一直重複執行計畫任務。

[on completion [not] preserve]:可選項,預設是on completion not preserve 即計畫任務執行完畢後自動drop該事件;on completion  preserve則不會drop掉 。

[comment 'comment'] :可選項,comment 用來描述event;相當注釋,最大長度64個位元組。

[enable | disable] :設定event的狀態,預設enable:表示系統嘗試執行這個事件, disable:關閉該計畫事件。

do sql_statement: 需要執行的sql語句。

四、啟用/禁用/刪除事件

alter event evnet_name enable;

alter event evnet_name disable;

drop event evnet_name ;

五、使用示例:

mysql>create table test.t1 (id int,dt datetime);

mysql>insert into test.t1 select 1,now();

例1:

#每分鐘往t1表中插入一次記錄

delimiter $$

create event if not exists e_test1

on schedule every 1 minute

on completion preserve

do begin

insert into t1 select (select max(id) from test.t1)+1 as id ,now();

end$$

delimiter ;

例2:

#2天後刪除id小於1000的記錄

delimiter $$

create event if not exists e_test2

on schedule at current_timestamp + interval 10 day

on completion preserve

do begin

delete from test.t1 where id<1000;

end$$

delimiter ;

例3:

#每個月1號凌晨1點清空表

delimiter $$

create event if not exists e_test3

on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day), interval 1 month),interval 1 hour)

on completion preserve

do begin

truncate table test.t1;

end$$

delimiter ;

例4:

#2023年1月1日零點清空表

delimiter $$

create event if not exists e_test4

on schedule at 『2014-01-01 00:00:00』

on completion preserve

do begin

truncate table test.t1;

end$$

delimiter ;

例5:

#2天後開始,1個月後停止

delimiter $$

create event if not exists e_test5

on schedule every 1 day

starts current_timestamp + interval 2 day

ends current_timestamp + interval 1 month

on completion preserve

do begin

truncate table test.t1;

end$$

delimiter ;

mysql event 排程歷史記錄

mysql 事件排程器 MySQL事件排程器

一 建立排程器 將資料庫按自定義的時間週期觸發某種操作,類似linux下的crontab 例項 建立排程器後的每個1小時觸發一次 create event myevent on schedule at current timestamp interval 1 hour doupdate mysche...

MySQL事件排程器

事件排程器 event scheduler 可以定時執行某些特定任務,可以看做基於時間的觸發器.show variables like event scheduler select event scheduler set global event scheduler 1 show create ev...

MYSQL 事件排程器

要檢視當前是否已開啟事件排程器 show variables like event scheduler 開啟事件高度器 set global event scheduler 1 建立事件 語法 create event if not exists event name on schedule sch...