mysql中event 定時觸發 的使用

2021-08-31 09:35:18 字數 3748 閱讀 9043

1、從mysql5.1.6版本開始增加事件排程器(event scheduler),在使用這個功能之前必須確保event_scheduler已開啟

1.1、開啟event_scheduler,可使用以下方法

set global event_scheduler = 1; 

set global event_scheduler = on;

在配置my.cnf檔案 中加上 event_scheduler = 1

1.2、檢視是否已開啟事件排程器,可執行如下sql: 

show variables like 'event_scheduler';

select @@event_scheduler;

show processlist;

select * from mysql.event;

select * from information_schema.events;

2、create event 語法如下:

create event

[if not exists] --------------------------------------*語法1

event_name --------------------------------------------*語法2

on schedule schedule ------------------------------*語法3 

[on completion [not] preserve] --------------*語法4

[enable | disable] ----------------------------------*語法5 

[comment 'comment'] -------------------------------*語法6 

do sql_statement --------------------------------------*語法7

說明如下:

語法1、[if not exists]

使用if not exists,當event名稱存在時不建立,只有名稱不存在時才建立,建議不使用以保證event建立成功。

語法2、event_name

event名稱,最大長度為64個位元組且唯一。

語法3、on schedule 計畫任務,有兩種設定計畫任務的方式:

方式1:at 時間戳,用來完成單次的計畫任務;

時間戳可以是任意的timestamp 和datetime 資料型別,時間戳需要大於當前時間。

方式2: every 時間(單位)的數量時間單位[starts 時間戳] [ends時間戳],用來完成重複的計畫任務;

而preserve的作用是使事件在執行完畢後不會被drop掉,建議使用該引數,以便於檢視event具體資訊。

語法5、[enable | disable]:引數enable和disable表示設定事件的狀態(enable:執行這個事件、disable:不執行該事件)

可以用如下命令關閉或開啟事件:alter event event_name  enable/disable

語法6、[comment 'comment']

注釋會出現在元資料中,它儲存在information_schema表的comment列,最大長度為64個位元組。'comment'表示將注釋內容放在單引號之間,建議使用注釋以表達更全面的資訊。

語法7、 do sql_statement

do sql_statement欄位表示該event需要執行的sql語句或儲存過程。這裡的sql語句可以是復合語句,例如:

begin

create table tab_name;//建立表

drop table tab_name;//刪除表

call proc_name();//呼叫儲存過程

end使用begin和end識別符號將復合sql語句按照執行順序放在之間。當然sql語句是有限制的,對它的限制跟函式function和觸發器trigger 中對sql語句的限制是一樣的,

如果你在函式function 和觸發器trigger 中不能使用某些sql,同樣的在event中也不能使用。明確的來說有下面幾個:

lock tables

unlock tables

create event

alter event

load data

3、 執行邏輯

for (已建立事件each event that has been created)

if (事件的狀態非disable)

and (當前時間在ends時間之前)

and (當前時間在starts時間之後)

and (在上次執行後經過的時間)

and (沒有被執行)

then:

建立乙個新的執行緒

傳遞事件的sql語句給新的執行緒

(該執行緒在執行完畢後會自動關閉)

4、修改事件

使用alter event 來修改事件,具體的alter語法如下,與建立事件的語法類似:

alter event

event_name

on schedule schedule

[rename to new_event_name]

[on completion [not] preserve]

[enable | disable]

[comment 'comment']

do sql_statement

5、 刪除事件

event使用drop event語句來刪除已經建立的事件,語法如下:

drop event [if exists] event_name

6、 例項

-- 建立儲存過程

drop procedure prc_delete_sys_menu_name;

create procedure prc_delete_sys_menu_name()

begin

delete from sys_menu_name;

end;

-- 測試

call prc_delete_sys_menu_name();

-- 建立event

-- 每隔10秒執行

drop event if exists eve_delete_sys_menu_name;

create event if not exists eve_delete_sys_menu_name

on schedule every 10 second

on completion preserve

do call prc_delete_sys_menu_name();

-- 設定開啟event_scheduler

set global event_scheduler = on;

-- 檢視是否開啟event_scheduler

show variables like 'event_scheduler';

select * from mysql.event;

mysql 中定時任務event的建立

以前一直使用quartz建立定時任務,但是有時候定時任務一多,總感覺在某個時間段內集中進行定時任務會對tomcat造成比較大的壓力 對不起,這是我猜的。所以後來就發現mysql 在5.1之後新增了事件排程器 event scheduler 而且如果是定時呼叫乙個儲存過程,會比使用quartz簡單的多...

mysql建立定時器(event)

mysql建立定時器 event 步驟。1 select version 檢視當前使用的mysql版本。2 showvariables like sche 檢視是否開啟event與開啟event。event功能預設是關閉的,可以使用上面的語句來看event的狀態,如果是off或者0,表示是關閉的。3...

MySQL 定時器EVENT學習

mysql從5.1開始支援event功能,類似oracle的job功能。有了這個功能之後我們就可以讓mysql自動的執行資料彙總等功能,不用像以前需要操作的支援了。如linux crontab功能。建立測試表 create table t v varchar 100 not null engine ...