天天看點

mysql建立定時執行存儲過程任務1.prepare2.建立一個存儲過程3.建立一個事件,并調用存儲過程4.懶人的做法

sql文法很多,是一門完整語言。這裡僅僅實作一個功能,不做深入研究。

目标:定時更新表或者清空表。

案例:曾經做過定時清空位置資訊表的任務。(然而,當時并未考慮伺服器挂掉後的情況)

本次測試:每5s更新表字段+1

建立一個表:

1

2

3

4

5

6

7

8

9

10

11

<code>DROP</code> <code>TABLE</code> <code>IF EXISTS `test_sche`;</code>

<code>CREATE</code> <code>TABLE</code> <code>`test_sche` (</code>

<code>  </code><code>`id` </code><code>int</code><code>(11) </code><code>NOT</code> <code>NULL</code><code>,</code>

<code>  </code><code>`counts` </code><code>int</code><code>(11) </code><code>DEFAULT</code> <code>NULL</code><code>,</code>

<code>  </code><code>PRIMARY</code> <code>KEY</code> <code>(`id`)</code>

<code>) ENGINE=InnoDB </code><code>DEFAULT</code> <code>CHARSET=utf8;</code>

<code>-- ----------------------------</code>

<code>-- Records of test_sche</code>

<code>INSERT</code> <code>INTO</code> <code>`test_sche` </code><code>VALUES</code> <code>(</code><code>'1'</code><code>, </code><code>'188'</code><code>);</code>

  

<code>CREATE</code> <code>DEFINER=`root`@`localhost` </code><code>PROCEDURE</code> <code>`</code><code>add</code><code>`()</code>

<code>BEGIN</code>

<code>    </code><code>#Routine body goes here...</code>

<code>UPDATE</code> <code>test_sche </code><code>SET</code> <code>counts=counts+1 </code><code>WHERE</code> <code>id=1;</code>

<code>END</code>

注意,建立存儲過程的時候,如果采用指令行的方式,需要先修改指令結束符,将分号改成其他的符号

<code>-- 設定分隔符為 '$$' ,mysql預設的語句分隔符為 ';' ,這樣在後續的 create 到 end 這段代碼都會看成是一條語句來執行 </code>

<code>DELIMITER $$ </code>

<code>//建立存儲過程或者事件語句</code>

<code>//結束</code>

<code>$$</code>

<code>- 将語句分割符設定回 </code><code>';'</code> 

<code>DELIMITER ;</code>

<code>CREATE</code> <code>DEFINER=`root`@`localhost` EVENT `test_sche_event`</code>

<code>ON</code> <code>SCHEDULE EVERY 5 </code><code>SECOND</code> <code>STARTS </code><code>'2016-07-12 22:11:50'</code>

<code>ON</code> <code>COMPLETION </code><code>NOT</code> <code>PRESERVE ENABLE</code>

<code>DO CALL `</code><code>add</code><code>`</code>

3.1開啟定時器

<code>set</code> <code>GLOBAL</code> <code>event_scheduler = 1; </code>

到這裡,定時任務已經可以執行了,查詢可以發現count字段一直在累加。如果想要檢視事件運作情況:

3.2檢視事件運作狀态

<code>select</code> <code>* </code><code>from</code> <code>mysql.event </code>

3.3開啟或者關閉事件

<code>ALTER</code> <code>EVENT test_sche_event DISABLE;</code>

<code>ALTER</code> <code>EVENT test_sche_event ENABLE;</code>

好久沒去寫sql,文法都快忘光了,然而借助工具還是很容易做出定時器的。這裡采用Navicat for mysql:

4.1建立存儲過程

4.2建立事件

mysql建立定時執行存儲過程任務1.prepare2.建立一個存儲過程3.建立一個事件,并調用存儲過程4.懶人的做法
mysql建立定時執行存儲過程任務1.prepare2.建立一個存儲過程3.建立一個事件,并調用存儲過程4.懶人的做法

本文轉自Ryan.Miao部落格園部落格,原文連結:http://www.cnblogs.com/woshimrf/p/5665236.html,如需轉載請自行聯系原作者