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,如需转载请自行联系原作者