MYSQL定時任務

來源:互聯網
上載者:User

標籤:handler   serve   container   myisam   使用者   ase   att   ima   sso   

點選連結加入群【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=MyISAMDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ciCHECKSUM=0DELAY_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如同是總閘,關閉之後,所有定義的事件斷電

 

MYSQL定時任務

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.