標籤: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(封裝的函數)
那麼我們先來封裝一個函數:
#寫一個函數 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定時任務