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建立事件

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