場景:
例如:某系統,用戶每天只能擁有一次的抽獎機會,抽過后當天就不可再抽,但是過了24:00點后用戶就重新擁有一次抽獎機會。像這種 需要數據庫定時對某個字段進行更新操作的任務,完全可以通過數據庫本身的事件機制進行操作,而服務器端也不需要用額外的代碼進行這種監控定時的操作。
Mysql:
本文討論的是Mysql數據庫,Event Scheduler事件調度器應該是在Mysql5.1引入的,所以使用定時任務調度時,請注意查看你的Mysql版本。
創建事件調度的語法:
/*
創建事件event_name
*/
DELIMITER $$
CREATE
event
IF
NOT
EXISTS
event_name
ON
SCHEDULE 任務條件
ON
COMPLETION PRESERVE DO SQL操作 DELIMITER ;
實例情景 :每半個小時更新統計字段count為0,
/* 創建定時定時更新count字段事件 */ DELIMITER $$ CREATE event IF NOT EXISTS update_count ON SCHEDULE EVERY 30 MINUTE
/*MYSQL注意時區設置,默認非中國時區*/
STARTS TIMESTAMP '2009-12-18 02:58:00' ON COMPLETION PRESERVE DO update tb_count set count=0 $$ DELIMITER ;
如上,創建了一個名叫update_count的事件,執行條件則為每30分鐘執行一次,(EVERY 30 MINUTE),執行Sql為(update tb_count set count=0), 當然你可能會按天執行, 所以你也可以寫(EVERY 1 DAY),
如果執行的任務Sql復雜,我們可以寫觸發器,直接看示例代碼:
DELIMITER $$
DROP
PROCEDURE
IF
EXISTS
update_count$$
CREATE
PROCEDURE
update_count()
BEGIN
UPDATE
tb_count
SET
count
=
0
;
END
$$ DELIMITER ;
以上為創建一個存儲過程update_count,執行對tb_count中count字段的更新。任務中代碼中do字段后則改為 (call update_count() $$) 。當然你可能會更復雜的需求。
添加完event后,還需要查看event_scheduler是否開啟,否則添加的event不會執行,移步下面的代碼:
/*
查看event是否開啟
*/
SHOW VARIABLES
LIKE
'
%sche%
'
;
/*
開啟event
*/
SET
GLOBAL event_scheduler
=
1
;
查看和關閉你所添加的event:
?
/*
關閉 event
*/
ALTER
event update_count
ON
COMPLETION PRESERVE DISABLE;
/*
啟用 event
*/
ALTER
event update_count
ON
COMPLETION PRESERVE ENABLE;
?更多MySql語法可查看: http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
