天天看点

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