古怪猴子下载:Mysql中的定時任務

独家真实传授pt古怪猴子玩法规律 www.cfrtc.icu 一、說明 后臺周期定時任務可以有多種解決方案,我所知道的大概有以下幾種: 后臺框架自帶定時任務。比如php中的Laravel框架里有提供定時任務操作接口,其他的框架大家可以單獨針對…

一、說明

  • 后臺周期定時任務可以有多種解決方案,我所知道的大概有以下幾種:

    1. 后臺框架自帶定時任務。比如php中的Laravel框架里有提供定時任務操作接口,其他的框架大家可以單獨針對了解。

    2. 服務器操作系統層面的定時。通常我們的服務器主要基于兩大平臺,一個windows server,它的定時任務系統有提供的。Linux下也有,通常流行的是crontab工具實現的(想了解這里有個視頻教程),但是crontab的定時任務通常定時操作腳本這樣的文件,而直接定時操作數據庫的就比較麻煩了。但是也有解決辦法,就是在服務器端寫一個get請求url,在后臺里完成要定時完成的數據庫操作,這樣我們只要實現定時訪問該接口就行了,Linux下的curl命令可以很方便發出get請求,我們只要寫個包含訪問該接口的腳本,再結合crontab就可以完成后臺數據的定時更新操作了。

    3. 但是畢竟寫個接口安全性不是太高,而大家用的如果是mysql數據庫,那就正好可以利用其自帶的定時操作了,下面簡單介紹mysql定時操作的使用。

二、mysql定時操作


1、查看定時策略是否開啟

  • 查看命令

1
show variables like '%event_sche%';
  • 顯示的event_scheduler為OFF時用以下命令開啟

1
set global event_scheduler=1;
  • 注意:以上的改法在數據庫重啟后將會恢復為原來狀態,要想數據庫重啟后也可以讓event_scheduler開啟,則需要在配置文件my.ini的設置。修改如下,然后重啟mysql服務即可。

1
2
[mysqld]
event_scheduler=ON //這一行加入mysqld標簽下

2、創建procedure(存儲過程)


什么是procedure(存儲過程)?

  • 存儲過程?當我聽到這個詞的時候,以為它是mysql存儲數據的一個流程而不是一個名詞,但是當我網上了解時,才知道這個詞是翻譯過來的,原生詞為Procedure,實際上它的含義就是相當于我們面向對象里的方法或者說是函數,在它里面可以完成多個sql語句的操作,并且可以定義參數傳值等,與一般的單條sql語句的區別主要在這里。

  • 詳細了解: 點我

創建存儲過程

1
2
3
4
5
6
7
use test;
delimiter //
create procedure test_proce()
begin
insert into weuse(name,created_at,updated_at) values('hello',now(),now());
end//
delimiter ;

enter image description hereenter image description here

  • 上面的代碼說明:

    1. use test; 這個誰都知道,使用某個數據庫,這里要強調的是存儲過程一定是對于某個數據庫而言的,所以必須要選中一個數據庫才能創建成功。

    2. delimiter // 這個是將mysql中以;(分號)結尾的規定修改為以//(雙斜杠)為語句結束符,因為存儲過程里可以有多條sql 語句,里面的sql語句都以;號結尾,如果回車了那么系統會當做sql語句直接執行了,我們希望的是先定義這一系列sql語句而先不執行,所以要改下操作結束符。當然你在改后一定要改回來,大家可以看到最后一行有對應的修改回來的語句。

    3. 下面的是一起輸入的,可以知道分別是創建存儲過程test_proce(),名稱可以隨便起的,然后是在begin –end之間是定義一系列sql語句的就可以了,記住最后end結尾要以之前修改后的結尾符結束。

      1
      2
      3
      4
      create procedure test_proce()
      begin
      insert into weuse(name,created_at,updated_at) values('hello',now(),now());
      end//

3、創建定時任務


上面創建存儲過程實際上是為定時任務做鋪墊的,因為上面只說明了怎么創建存儲過程,但是未說明怎么調用,那這里就用到了調用存儲過程了。

創建定時任務event(事件)

1
2
3
4
create event second_event
on schedule every 1 second
on completion preserve disable
do call test_proce();

enter image description hereenter image description here

  • 代碼說明:

    1. 上面為整體代碼,敲完再寫分號

    2. 第一行create event day_event是創建名為second_event的事件,注意此處沒有括號

    3. 第二行是創建周期定時的規則,本處的意思是每秒鐘執行一次

    4. 第三行on completion preserve disable是表示創建后并不開始生效。

    5. 第四行do call test_proce()是該event(事件)的操作內容,表示調用我們剛剛創建的test_proce()存儲過程。

查看定時任務event(事件),可以查看本機所有的事件

1
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;

enter image description hereenter image description here

4、開啟已經創建好的event(事件)


1
2
alter event second_event on completion preserve enable;//開啟定時任務
alter event second_event on completion preserve disable;//關閉定時任務
  • 當我們用第一句命令開啟定時任務時,可以就可以查看數據庫情況,已經實現了每秒鐘執行一次了,如圖。

enter image description hereenter image description here

  • 要想關閉定時任務只要執行上面的第二句命令,關閉需要關閉的定時任務就可以了。

5、常見周期定時規則


  • 周期執行–關鍵字 EVERY

    1. 單位有:second,minute,hour,day,week(周),quarter(季度),month,year

    2. 如:

      1
      2
      3
      on schedule every 1 second //每秒執行1次
      on schedule every 2 minute //每兩分鐘執行1次
      on schedule every 3 day //每3天執行1次
  • 在具體某個時間執行–關鍵字 AT

    1. 如:

      1
      2
      3
      on schedule at current_timestamp()+interval 5 day //5天后執行
      on schedule at current_timestamp()+interval 10 minute //10分鐘后執行
      on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9點50執行
  • 在某個時間段執行–關鍵字STARTS ENDS

    1. 如:

      1
      2
      on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后開始每天都執行執行到下個月底
      on schedule every 1 day ends current_timestamp()+interval 5 day //從現在起每天執行,執行5天

6、效率工具


MysqlWorkBench

是官方推薦的免費可視化mysql操作工具,方便建模,ER圖操作,經我發現好像只能可視化操作存儲過程(也可能是自己沒找到)

  • 存儲過程:

enter image description hereenter image description here

  • Event事件,可以查看,用sql命令

1
2
SELECT * FROM information_schema.EVENTS;//查看所有事件屬性
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;//查看主要幾個屬性

enter image description hereenter image description here

這個是收費的軟件,但是可視化操作比較輕量級,功能也很多,它可以可視化操作存儲過程和Event事件,詳細操作大家可以自己摸索?。?!

enter image description here

 

來源于://jiyiren.github.io/2016/03/27/Mysql_schedule/

即使只是凡世中一顆小小的塵埃,命運也要由自己主宰,像向日葵般,迎向陽光、勇敢盛開

為您推薦

返回頂部