MYSQL定時任務


點擊鏈接加入群【php/web 學習課堂】:https://jq.qq.com/?_wv=1027&k=5645xiw

 

歡迎大家加入,一起討論學習

 

這里我們要完成的定時任務,比較簡單

效果:每過X秒 某一些用戶積分 加X

 

第一步:我們先創建一個表和插入數據

/* 創建一個表 */
CREATE TABLE `test_name` (
`id`  int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵,自增' ,
`user_name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '用戶名' ,
`integral`  int(11) NULL COMMENT '積分' ,
`is_adm`  tinyint(1) NULL COMMENT '管理員,1-是,0-不是' ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
CHECKSUM=0
DELAY_KEY_WRITE=0
;

/* 添加數據 */
INSERT INTO `test_name` VALUES ('1', '會員1', '0', '1');
INSERT INTO `test_name` VALUES ('2', '會員2', '0', '0');
INSERT INTO `test_name` VALUES ('3', '會員3', '0', '0');

 

看看效果:

 

ok,表和數據做好了,我們說一下需求:

需求1:沒經過2秒管理員的積分加1,字段is_adm為1的則是管理員

 

以上為添加表和數據,並提出需求

--------------------------------分割線--------------------------------

以下內容,我們會提到如何啟動定時任務,來完成我們的需求

 

首先第一步,我們要檢查我們數據庫,是否開啟了event(事件)

SHOW VARIABLES LIKE 'event_scheduler' #查看狀態

 

運行以上代碼,如果你的結果,Value字段的值為"OFF",代表你的事件屬於關閉狀態,那么我們就要開啟它,運行以下代碼:

SET GLOBAL event_scheduler = ON;  #ON開啟,OFF關閉

運行之后,再返回上一個,再次檢查事件的狀態,當結果為"ON",則代表你的事件已開啟,我們就繼續往下走。。

 

既然是定時任務,那么我們就要封裝一個函數,流程是這樣的:

  1. 封裝一個函數
  2. 封裝一個事件
  3. 事件開始運行,滿足條件,調用 1(封裝的函數)

那么我們先來封裝一個函數:

#寫一個函數  begin------------
CREATE PROCEDURE test() 
BEGIN 
update test_name SET integral= integral + 1 WHERE is_adm = 1; 
END; 
#寫一個函數  end------------

 

運行以上代碼成功之后,大家不用提心吊膽,不會立刻修改你的數據,因為這里只是封裝了一個函數,我們並沒有調用它,它僅僅是存在。所以需要寫一個事件,來調用它

#寫一個事件  begin------------
create event if not exists e_test 
on schedule every 2 second 
on completion preserve 
do call test(); 
#寫一個事件  end------------

 

運行以上代碼,成功之后,大家也別着急,還不會立刻運行此事件。雖然在上面,我們已經開啟了event。但是我們還要單個來運行,指定一個事件來運行,就跟訪問接口一樣,指定一個接口。。。

#開啟事件
alter event e_test ON 
COMPLETION PRESERVE ENABLE; 

這里能看見,開啟事件,指定的是 e_test 這個事件名字,跟我們上面創建的是一樣的,那么運行這一段代碼之后,你會發現,你的表 test_name 里,is_adm = 1 的行,字段為 integral(積分) 的會每 2秒 加1

 

那么一個簡單的定時任務,我們完成了。

噢,對了,關閉單個事件,使用以下的代碼:

#關閉事件
alter event e_test ON 
COMPLETION PRESERVE DISABLE; 

運行之后,就會停止對 e_test 事件的使用

以上需要注意:

  • event默認情況下,都是OFF關閉狀態,在MYSQL配置里可以找到,如果你在配置里修改成ON,就會默認成ON了
  • 關閉數據庫之后,如果你的event還是OFF,也會因為配置里默認的OFF因為,而停止
  • event關閉之后,你的單個事件屬於開啟狀態,那么當你開啟event之后,單個事件狀態依舊是開啟的
  • 如果你要關閉某個事件,請使用最后一個“關閉事件”的代碼來關閉,不要使用event關閉,會影響到其他的事件
  • event如同是總閘,關閉之后,所有定義的事件斷電

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM