場景:
例如:某系統,使用者每天只能擁有一次的**機會,抽過後當天就不可再抽,但是過了24:00點後使用者就重新擁有一次**機會。像這種需要資料庫定時對某個字段進行更新操作的任務,完全可以通過資料庫本身的事件機制進行操作,而伺服器端也不需要用額外的**進行這種監控定時的操作。
mysql:
本文討論的是mysql資料庫,event scheduler事件排程器應該是在mysql5.1引入的,所以使用定時任務排程時,請注意檢視你的mysql版本。
建立事件排程的語法:
/*建立事件event_name
*/delimiter $$
create event if
notexists
event_name
on schedule 任務條件
oncompletion preserve
do sql操作
delimiter ;
例項情景:每半個小時更新統計欄位count為0,
/*建立定時定時更新count欄位事件
*/delimiter $$
create event if
notexists
update_count
on schedule every 30 minute
/*mysql注意時區設定,預設非中國時區*/
starts timestamp '2009-12-18 02:58:00'
oncompletion 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
ifexists
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語法可檢視:
mysql 事件 定時任務
1 檢視是否開啟事件功能 show variables like event scheduler 2 開啟事件功能 方法一 修改環境變數 set global event scheduler on 方法二 修改my.cnf event scheduler 1 或者on3 檢視排程器執行緒和事件 sh...
mysql 定時任務 生效 mysql定時任務
1.檢視是否開啟定時策略 show variables like event sche 若出現如下圖,則此時是關閉狀態 開啟定時策略 重啟無效 set global event scheduler 1 則需要在配置檔案my.ini的設定 重啟有效 mysqld event scheduler on ...
Mysql 中的事件 定時任務
一組sql集,用來執行定時任務,跟觸發器很像,都是被動執行的,事件是因為時間到了觸發執行,而觸發器是因為某件事件 增刪改 觸發執行 檢視是否開啟 如果顯示off,則輸入以下語句開啟 首先 新建user表 table structure for user drop table if exists us...