MySQL事件(1)

1.事件是MySQL在相應的時刻調用的過程式數據庫對象。
2.一個事件只能調用一次,一個事件也可以週期性的調用,可以在特定的時間調用。
3.MySQL調度器負責調度事件,要創建事件必須打開調度器:

set global event_scheduler=true;

關閉調度器:

set global event_scheduler=false;

4.創建一個事件記錄表來記錄事件的執行:

create table event_invoke(event_name varchar(20),
event_start timestmap)

5.創建一個立即啓動的事件:

create event direct on schedule at now()
do insert into event_invoke values('direct',now());

創建一個在2016年3月1號上午11點執行的事件:

create event direct2 on schedule at '2016-03-01  11:00:00'
do insert into event_invoke values('direct_20160301',now());

創建一個每三天執行一次的事件:

create event direct3 on schedule at now()+interval 3 day
do insert into event_invoke values('threedays',now());

創建一個在下週日執行的事件:

create event_sunday on schedule at 
case dayname(now())
when 'Sunday' then now() + interval 7 day
when 'Monday'then now() + interval 6 day
when 'Tuesday' then now() + interval 5 day
when 'Wednesday'then now() + interval 4 day
when 'Thursday'then now() + interval 3 day
when 'Friday'then now() + interval 2 day
when 'Saturday'then now() + interval 1 day
do insert into event_invoke values('next_sunday',now());

以上可以簡化爲:

create event next_sunday on schedule at 
now()+interval (8-dayofweek(now())) day
do insert into event_invoke values('next_sunday',now());

創建一個明天上午10點執行的事件:

create event tomorrow10 on schedule at timestamp(curdate() + interval 1 day,'10:00:00') do insert into event_invoke values('tomorrow',now());

創建一個事件在3小時後啓動並且每2小時運行一次直到晚上11點:

create event every2hour on schedule every 2 hour 
starts now()+3 hour  ends curdate()+interval 23 hour
do insert into event_invoke values('every2hour',now());

創建一個事件,明天中午12點運行,並且每分鐘運行一次,一共運行6次:

create event sixtime on schedule every 1 minute
starts timestamp(curdate()+interval 1 day ,'12:00:00')
ends timestamp(curdate + interval 1 day,'12:00:00')+interval 5 minute do insert into event_invoke values('_sixtimes',now());

創建一個事件他在Sunday啓動並且持續後面的四個周:

create event fivesundays starts 
case dayname(now())
when 'Sunday' then now() 
when 'Monday'then now() + interval 6 day
when 'Tuesday' then now() + interval 5 day
when 'Wednesday'then now() + interval 4 day
when 'Thursday'then now() + interval 3 day
when 'Friday'then now() + interval 2 day
when 'Saturday'then now() + interval 1 day
end
 ends case dayname(now())
 when 'Sunday' then now() 
when 'Monday'then now() + interval 6 day
when 'Tuesday' then now() + interval 5 day
when 'Wednesday'then now() + interval 4 day
when 'Thursday'then now() + interval 3 day
when 'Friday'then now() + interval 2 day
when 'Saturday'then now() + interval 1 day

end + interval 4 week 
do insert into event_invoke values('next_4_sunday',now());

代碼來源:MySQL開發者SQL權威指南

發佈了55 篇原創文章 · 獲贊 15 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章