Mysql定時執行任務方法的實現

2021-08-15 21:28:12 字數 2669 閱讀 4945

在做活動的時候需要乙個定時器,在網上找個好幾個外掛程式都不太好用cron4j找個外掛程式又不能精確到秒,所以為了運算元據庫,就用了資料庫自己帶的定時執行任務。

1、首先要保證event事件是開啟狀態,預設情況下是關閉的,

set

global event_scheduler=1;

或者 set

global event_scheduler=no;

2、開始操作

set time_zone = '+8:00';

setglobal event_scheduler = 1;

建立乙個你要操作的表。我這個表在資料庫demo下面

create

table

`test2` (

`id`

int(11) not

null auto_increment,

`t_id`

int(11) not

null,

`t_name`

varchar(255) default

null,

primary

key (`id`)

) engine=innodb auto_increment=51

default charset=utf8;

選擇你要操作的資料庫也就是上面提到的demo

use test2

為了避免衝突,執行乙個刪除語句

drop event if

exists event_test

參考了一下別的東西很有幫助的就是設定分隔符,這一點我本來弄了好長時間

# 設定分隔符為 '$$' ,mysql預設的語句分隔符為 ';' ,這樣在後續的 create 到 end 這段**都會看成是一條語句來執行

delimiter $$

建立乙個任務,在每天10點19的時候開始執行

create event event_test

on schedule every day starts timestamp

'2018-02-28 10:19:00'

do# 開始該計畫任務要做的事

begin

insert test2 values(1,1,'test');

-- 結束計畫任務

end$$

# 將語句分割符設定回 ';'

delimiter ;

3、關閉和開啟事件

關閉事件

alter event event_test disable;

開啟事件

alter event event_test enable;

4、查詢事件是否開啟

select *from mysql.event

5、要檢視當前是否已開啟事件排程器,可執行如下sql:

show variables like 『event_scheduler』

6、.event的時間設定

設定event很簡單,但是麻煩的是如何設定執行的時間,網上找了一些,自己總結了一下。

先看語句,如下面這個

create event test_event on schedule every 1 day starts 『2012-09-24 00:00:00』

on completion preserve enable do call test_procedure();

every 後面的是時間間隔,可以選 1 second,3 minute,5 hour,9 day,1 month,1 quarter(季度),1 year

從2023年1月13號0點開始,每天執行一次

on schedule every 1 day starts 『2013-01-13 00:00:00』

從現在開始每隔九天定時執行

on schedule every 9 day starts now() ;

每個月的一號凌晨1 點執行

on schedule every 1 month starts date_add(date_add(date_sub(curdate(),interval day(curdate())-1 day),interval 1 month),interval 1 hour);

每個季度一號的凌晨1點執行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),』-『,elt(quarter(curdate()),1,4,7,10),』-『,1)),interval 1 quarter),interval 1 hour);

每年1月1號凌晨1點執行

on schedule every 1 quarter starts date_add(date_add(date(concat(year(curdate()),』-『,elt(quarter(curdate()),1,4,7,10),』-『,1)),interval 1 quarter),interval 1 hour);

注意:真實的開發環境中,會遇到mysql服務重啟或者斷電的情況,此時則會出現事件排程器被關閉的情況,所有事件都不在起作用,要想解決這個辦法,則需要在mysql.ini檔案中加入event_scheduler = on; 的語句

參考文獻:

mysql的定時執行任務

如下 show variables like event sche 查詢mysql的事件的狀態,預設是off啟動事件 set global event scheduler 1 設定事件為啟動狀態,資料庫重啟後失效在mysql workbench工具的資料庫中建立儲存過程的方法是選擇 stored p...

定時執行任務

在windows上,使用configuration task scheduler 任務計畫程式 task scheduler library 任務計畫程式庫 create task.或者 control panel scheduled tasks add a scheduled task.在linu...

定時執行任務

spring中可以通過配置方便的實現週期性定時任務管理,這需要用到以下幾個類 org.springframework.schedu ling.quartz.methodinvokingjobdetailfactorybean 配置需要排程的bean的某個方法 org.springframework....