1、建立定時器事件
語法如下:
create event [if not exists] 『事件名』
on schedule schedule
[on completion [not] preserve]
[enable | disable]
[comment 'comment']
do sql_statement
2、修改事件
使用alter event來修改事件,具體的alter語法如下,與建立事件的語法類似:
alterevent
event_name
on schedule schedule
[rename tonew_event_name]
[on completion [not]preserve]
[enable | disable]
[comment 'comment']
do sql_statement;
3、關於事件計畫的許可權:
單獨使用event呼叫sql語句時,檢視和建立需要使用者具有event許可權,呼叫該sql語句時,需要使用者具有執行該sql的許可權。event許可權的設定儲存在mysql.user表和mysql.db表的event_priv欄位中。(flush privileges;)
當event和procedure配合使用的時候,檢視和建立儲存過程需要使用者具有create routine許可權,呼叫儲存過程執行時需要使用excute許可權,儲存過程呼叫具體的sql語句時,需要使用者具有執行該sql的許可權。
(figure1:user表的event_priv許可權)
獲取當前登陸的使用者和資料庫:select current_user(), schema();
從figure1可以知道bfsql@%是沒有event_priv許可權的,在該使用者下建立事件的時候會出現下面的錯誤:
error code: 1044
access denied for user 'bfsql'@'%' to database 'blog'
如果出現上面的錯誤,執行下面的sql就可以給bfsql@%賦予建立event的許可權:
update mysql.user set event_priv = 'y' where host='%' and user='bfsql';
如果你這個時候再次執行建立event的sql,還是會出現上面的錯誤,因為你需要執行:
flush privileges;最後,你可以通過show grants for 'bfsql'@'%';檢視所有許可權;
4、例項
create
event testevent
on schedule every 10 second starts now()
on completion preserve enable
do begin
-- 現在執行每隔10秒執行一次
insert into ad_db.fh_test_timer ( value) values (now()); -- 迴圈要幹的事情 可以呼叫其他儲存過程 如:call test();
end注意:如果呼叫的是,儲存過程,則do後面的begin end不要。
5、開啟、關閉定時器
開啟(執行sql語句如下):
set global event_scheduler = 1; -- 啟動定時器
alter event testevent on completion preserve enable; -- 開啟事件
關閉定時器:
set global event_scheduler = 0; -- 關閉定時器
alter event testevent off completion preserve disable; -- 關閉事件
總結:鍵值1或者on表示開啟;0或者off表示關閉;
6、時間設定
例項
on schedule 計畫任務,有兩種設定計畫任務的方式:
1. at 時間戳,用來完成單次的計畫任務。
2. every 時間(單位)的數量時間單位[starts 時間戳] [ends時間戳],用來完成重複的計畫任務。
在兩種計畫任務中,時間戳可以是任意的timestamp 和datetime 資料型別,時間戳需要大於當前時間。
在重複的計畫任務中,時間(單位)的數量可以是任意非空(not null)的整數式,可以選 1 second,3 minute,5 hour,9 day,1month,1 quarter(季度),1 year
,
分別對應多少秒、分鐘、小時、天、月、季度、年
重複計畫如:
a、從2023年12月18號0點開始,每天執行一次
on
schedule every 1
day
starts
'2013-12-18 00:00:00'
b、從現在開始每隔九天定時執行
onscheduleevery9 day
startsnow();
c、每個月的一號凌晨1 點執行
on schedule every1 monthstartsdate_add(date_add(date_sub(curdate(),interval day(curdate())-1day),interval 1 month),interval 1 hour);
d、每個季度一號的凌晨1點執行
on schedule every1 quarterstartsdate_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval1 quarter),interval 1 hour);
f、每年1月1號凌晨1點執行
on schedule every1 yearstartsdate_add(date_add(date(concat(year(curdate()),'-',elt(quarter(curdate()),1,4,7,10),'-',1)),interval1 quarter),interval 1 hour);
7、其他
其他命令:
/*show variables like '%sche%'; -- 檢視定時器狀態
set global event_scheduler = 1; -- 啟動定時器
set global event_scheduler = 0; -- 停止定時器
alter event testevent on completion preserve enable; -- 開啟事件
alter event testevent on completion preserve disable; -- 關閉事件
*/注意:
1、mysql定時器是從mysql5.1開始的,如果你的mysql版本低於5.1,那就不能使用mysql定時器,查詢mysql版本的方法:select version()
2、mysql定時器,預設是關閉的。
3、查詢自己建立的定時器: select * from mysql.event;
MFC 定時器用法
mfc定時器的使用 1.在標頭檔案定義乙個afx msg void ontimer uint ptr nidevent 函式 定義乙個定時器id define systimetimer 1 2.實現該函式 void cminigatetes lg ontimer uint ptr nidevent ...
IOS開發 NSTimer 定時器用法總結
nstimer在ios開發中會經常用到,尤其是小型遊戲,然而對於初學者時常會注意不到其中的記憶體釋放問題,將其基本用法總結如下 一 初始化方法 有五種初始化方法,分別是 nstimer timerwithtimeinterval nstimeinterval ti invocation nsinvo...
as3 定時器用法
關鍵字 flas actionscript3.0 雖 然flash擁有越來越強大的周邊功能,但其核心依然是一款動畫製作軟體。在flash設計環境中,不編寫指令碼 也能快速製作出效果驚人的時間軸動 畫。但此類動畫是固定的,無法根據環境動態調整。使用actionscript生成和控制動畫,才能隨心駕馭動...