MYSQL定時任務

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

 

歡迎你們加入,一塊兒討論學習web

 

這裏咱們要完成的定時任務,比較簡單數據庫

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

 

第一步:咱們先建立一個表和插入數據函數

/* 建立一個表 */
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,表和數據作好了,咱們說一下需求:spa

需求1:沒通過2秒管理員的積分加1,字段is_adm爲1的則是管理員.net

 

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

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

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

 

首先第一步,咱們要檢查咱們數據庫,是否開啓了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如同是總閘,關閉以後,全部定義的事件斷電
相關文章
相關標籤/搜索