mysql 中定時任務event的建立

2021-07-10 01:13:13 字數 2960 閱讀 4494

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

①檢視event是否開啟:

如果是off,則代表關閉。

開啟事件排程的方法:

func1.執行:set global event_scheduler = 1 ;

或:set global event_scheduler = on ;

func2.在my.cnf中(windows環境下是my.ini)修改[mysqld]下的配置:--event_scheduler=1。

②建立事件:

語法:create event [if not exist] event_name

on  schedule  schedule  

[on completion [not] preserve]

[enable  |  disable]

[commnet 'comment']

do  sql_statement ;

[on completion [not] preserve]可以設定這個事件是執行一次還是持久執行,預設為not preserve。

其中語法中的'schedule'代表的是要定時執行的時間

schedule:

at timestamp [+interval interval]   

| every interval [starts timestamp] [end timestamp]

上句中的interval代表『間隔』的意思, 

quantity

do後邊的語句是要執行的任務,可以是乙個sql語句,也可以是儲存過程等。

③檢視意建立的定時任務:

(此時需要root授權)

func1:select * from mysql.event ;

func2:show events ;

func3:show create event  event_nam;此時可檢視詳細的任務內容,如:show create event  e_cancel_foodorder ;

④開啟定時任務:

alter  event  e_cancel_foodorder  on

completion   preserve

enable ;

⑤關閉定時任務:

alter  event  e_cancel_foodorder  

oncompletion   preserve

disable ;

(如果將此event執行了關閉後,重啟mysql會刪除掉該定時任務)

⑥修改定時任務:

alter  event  e_cancel_foodorder  on  schedule  every  5  day ;(將每天執行修改為5天執行一次)

⑦刪除定時任務:

drop event  [if exists]  event_name ;

⑧建立定時任務的示例:

每分鐘執行一次:

create   event   `e_cancel_foodorder`

on schedule every 1 minute 

do update food_order set status=8 where status=2 and timestampdiff(minute,time2,now())>10 ;

every 後面的是時間間隔,可以選 1 second,3 min

ute,5 ho

ur,9

day,1 month,1 quarter(季度),1 year

每天0點1分定點執行:

create   event   `e_cancel_foodorder`

on   schedule   every   1   day   starts '2015-12-29 00:01:00'

do update food_order set status=8 where status=2 and timestampdiff(minute,time2,now())>10 ;

從現在開始每隔九天定時執行:

onschedule every 9 day starts now()

每個月的一號凌晨1 點執行

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

每個季度一號的凌晨1點執行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);

每年1月1號凌晨1點執行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval 1 quarter),interval 1 hour);

mysql用event設定定時任務

mysql設定定時任務 需求 mysql資料庫裡面做個定時任務自動每天建立一張表。1.檢視是否開啟event與開啟event show variables like sche 若未開啟,set global event scheduler 1 2.建立儲存過程 每天建立乙個名為 test 年月日的表...

mysql 定時任務 生效 mysql定時任務

1.檢視是否開啟定時策略 show variables like event sche 若出現如下圖,則此時是關閉狀態 開啟定時策略 重啟無效 set global event scheduler 1 則需要在配置檔案my.ini的設定 重啟有效 mysqld event scheduler on ...

mysql 定時任務

檢視event是否開啟 複製 如下 show variables like sche 將事件計畫開啟 複製 如下 set global event scheduler 1 建立儲存過程test 複製 如下 create procedure test begin update examinfo set...