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 ...