Mysql編寫定時任務事件

2022-03-09 18:40:38 字數 1920 閱讀 7512

場景:

例如:某系統,使用者每天只能擁有一次的**機會,抽過後當天就不可再抽,但是過了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...