原文链接:https://jiyiren.github.io/2016/03/27/Mysql_schedule/
最近项目里面的后台需要用到定时任务,而 MySQL 从 5.0 开始自带了定时事件操作,所以学习下并做下记录。
后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种:
(1). 后台框架自带定时任务。比如 Php 中的 Laravel 框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解。
(2). 服务器操作系统层面的定时。通常我们的服务器主要基于两大平台,一个 Windows Server, 它的定时任务系统有提供的。Linux 下也有,通常流行的是 crontab 工具实现的 ( 想了解这里有个 视频教程 ), 但是 crontab 的定时任务通常定时操作脚本这样的文件,而直接定时操作数据库的就比较麻烦了。但是也有解决办法,就是在服务器端写一个 get 请求 url,在后台里完成要定时完成的数据库操作,这样我们只要实现定时访问该接口就行了,Linux 下的 curl 命令可以很方便发出 get 请求,我们只要写个包含访问该接口的脚本,再结合 crontab 就可以完成后台数据的定时更新操作了。
(3). 但是毕竟写个接口安全性不是太高,而大家用的如果是 MySQL 数据库,那就正好可以利用其自带的定时操作了,下面简单介绍 MySQL 定时操作的使用。
MySQL 配置
查看定时策略是否开启,查看命令:
show variables like '%event_sche%';
显示的 event_scheduler 为 OFF 时用以下命令开启:
set global event_scheduler=1;
以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可以让 event_scheduler 开启,则需要在配置文件 my.ini 的设置。修改如下,然后重启 MySQL 服务即可:
[mysqld]
event_scheduler=ON // 这一行加入 mysqld 标签下
创建 procedure ( 存储过程 )
什么是 procedure ( 存储过程 ) ?
存储过程?当我听到这个词的时候,以为它是 MySQL 存储数据的一个流程而不是一个名词,但是当我网上了解时,才知道这个词是翻译过来的,原生词为 Procedure, 实际上它的含义就是相当于我们面向对象里的方法或者说是 函数,在它里面可以完成多个 sql 语句的操作,并且可以定义参数传值等,与一般的单条 sql 语句的区别主要在这里,详细了解 点我。
创建存储过程
先上一段创建存储过程代码:
use test;
delimiter //
create procedure test_proce