mysql 定時器用法總結 例項 時間例項

2021-06-19 18:28:34 字數 4066 閱讀 7942

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、例項

createevent 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點開始,每天執行一次

onschedule every 1daystarts'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生成和控制動畫,才能隨心駕馭動...