Mysql中的定时任务
一、说明
- 后台周期定时任务可以有多种解决方案,我所知道的大概有以下几种:
- 后台框架自带定时任务。比如php中的Laravel框架里有提供定时任务操作接口,其他的框架大家可以单独针对了解。
- 服务器操作系统层面的定时。通常我们的服务器主要基于两大平台,一个windows server,它的定时任务系统有提供的。Linux下也有,通常流行的是crontab工具实现的(想了解这里有个视频教程),但是crontab的定时任务通常定时操作脚本这样的文件,而直接定时操作数据库的就比较麻烦了。但是也有解决办法,就是在服务器端写一个get请求url,在后台里完成要定时完成的数据库操作,这样我们只要实现定时访问该接口就行了,Linux下的curl命令可以很方便发出get请求,我们只要写个包含访问该接口的脚本,再结合crontab就可以完成后台数据的定时更新操作了。
- 但是毕竟写个接口安全性不是太高,而大家用的如果是mysql数据库,那就正好可以利用其自带的定时操作了,下面简单介绍mysql定时操作的使用。
二、mysql定时操作
1、查看定时策略是否开启
- 查看命令
1 |
show variables like '%event_sche%'; |
- 显示的event_scheduler为OFF时用以下命令开启
1 |
set global event_scheduler=1; |
- 注意:以上的改法在数据库重启后将会恢复为原来状态,要想数据库重启后也可以让event_scheduler开启,则需要在配置文件my.ini的设置。修改如下,然后重启mysql服务即可。
1 |
[mysqld] |
2、创建procedure(存储过程)
什么是procedure(存储过程)?
- 存储过程?当我听到这个词的时候,以为它是mysql存储数据的一个流程而不是一个名词,但是当我网上了解时,才知道这个词是翻译过来的,原生词为Procedure,实际上它的含义就是相当于我们面向对象里的方法或者说是函数,在它里面可以完成多个sql语句的操作,并且可以定义参数传值等,与一般的单条sql语句的区别主要在这里。
- 详细了解: 点我
创建存储过程
1 |
use test; |
enter image description here
上面的代码说明:
- use test; 这个谁都知道,使用某个数据库,这里要强调的是存储过程一定是对于某个数据库而言的,所以必须要选中一个数据库才能创建成功。
- delimiter // 这个是将mysql中以;(分号)结尾的规定修改为以//(双斜杠)为语句结束符,因为存储过程里可以有多条sql 语句,里面的sql语句都以;号结尾,如果回车了那么系统会当做sql语句直接执行了,我们希望的是先定义这一系列sql语句而先不执行,所以要改下操作结束符。当然你在改后一定要改回来,大家可以看到最后一行有对应的修改回来的语句。
下面的是一起输入的,可以知道分别是创建存储过程test_proce(),名称可以随便起的,然后是在begin –end之间是定义一系列sql语句的就可以了,记住最后end结尾要以之前修改后的结尾符结束。
1
2
3
4create procedure test_proce()
begin
insert into weuse(name,created_at,updated_at) values('hello',now(),now());
end//
3、创建定时任务
上面创建存储过程实际上是为定时任务做铺垫的,因为上面只说明了怎么创建存储过程,但是未说明怎么调用,那这里就用到了调用存储过程了。
创建定时任务event(事件)
1 |
create event second_event |
enter image description here
- 代码说明:
- 上面为整体代码,敲完再写分号
- 第一行create event day_event是创建名为second_event的事件,注意此处没有括号
- 第二行是创建周期定时的规则,本处的意思是每秒钟执行一次
- 第三行on completion preserve disable是表示创建后并不开始生效。
- 第四行do call test_proce()是该event(事件)的操作内容,表示调用我们刚刚创建的test_proce()存储过程。
查看定时任务event(事件),可以查看本机所有的事件
1 |
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS; |
enter image description here
4、开启已经创建好的event(事件)
1 |
alter event second_event on completion preserve enable;//开启定时任务 |
- 当我们用第一句命令开启定时任务时,可以就可以查看数据库情况,已经实现了每秒钟执行一次了,如图。
enter image description here
- 要想关闭定时任务只要执行上面的第二句命令,关闭需要关闭的定时任务就可以了。
5、常见周期定时规则
周期执行–关键字 EVERY
- 单位有:second,minute,hour,day,week(周),quarter(季度),month,year
如:
1
2
3on schedule every 1 second //每秒执行1次
on schedule every 2 minute //每两分钟执行1次
on schedule every 3 day //每3天执行1次
在具体某个时间执行–关键字 AT
如:
1
2
3on schedule at current_timestamp()+interval 5 day //5天后执行
on schedule at current_timestamp()+interval 10 minute //10分钟后执行
on schedule at '2016-10-01 21:50:00' //在2016年10月1日,晚上9点50执行
在某个时间段执行–关键字STARTS ENDS
如:
1
2on schedule every 1 day starts current_timestamp()+interval 5 day ends current_timestamp()+interval 1 month //5天后开始每天都执行执行到下个月底
on schedule every 1 day ends current_timestamp()+interval 5 day //从现在起每天执行,执行5天
6、效率工具
MysqlWorkBench
是官方推荐的免费可视化mysql操作工具,方便建模,ER图操作,经我发现好像只能可视化操作存储过程(也可能是自己没找到)
- 存储过程:
enter image description here
- Event事件,可以查看,用sql命令
1 |
SELECT * FROM information_schema.EVENTS;//查看所有事件属性 |
enter image description here
Navicat
这个是收费的软件,但是可视化操作比较轻量级,功能也很多,它可以可视化操作存储过程和Event事件,详细操作大家可以自己摸索啊!!
来源于:http://jiyiren.github.io/2016/03/27/Mysql_schedule/
Mysql中的定时任务的更多相关文章
- mysql中的几种日志了解
前言 MySQL中有以下日志文件,分别是: 1:重做日志(redo log) 2:回滚日志(undo log) 3:二进制日志(binlog) 4:错误日志(errorlog) 5:慢查询日志(slo ...
- MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结
MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...
- MySQL中redo log、undo log、binlog关系以及区别
MySQL中redo log.undo log.binlog关系以及区别 本文转载自:MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结 ...
- MySQL中You can't specify target table for update in FROM clause一场
mysql中You can't specify target table <tbl> for update in FROM clause错误的意思是说,不能先select出同一表中的某些值 ...
- MySql中in和exists效率
mysql中的in语句是把外表和内表作hash 连接,而exists语句是对外表作loop循环,每次loop循环再对内表进行查询.一直大家都认为exists比in语句的效率要高,这种说法其实是不准确的 ...
- [原创]MYSQL中利用外键实现级联删除和更新
MySQL中利用外键实现级联删除.更新 MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定 ...
- mysql中的多行查询结果合并成一个
SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 ...
- 【转】MySql中的函数
原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...
- sqlserver 中数据导入到mysql中的方法以及注意事项
数据导入从sql server 到mysql (将数据以文本格式从sqlserver中导出,注意编码格式,再将文本文件导入mysql中): 1.若从slqserver中导出的表中不包含中文采用: bc ...
随机推荐
- CentOS 7 休眠系统
CentOS 7的电源按钮只有关机和重启两项,但是可以用命令来休眠系统: 重启: $ systemctl reboot 退出系统并停止电源: $ systemctl poweroff 待机: $ sy ...
- ECMAScript 原始类型
---恢复内容开始--- ECMAScript 有 5 种原始类型(primitive type),即 Undefined.Null.Boolean.Number 和 String. 1.typeof ...
- AngularJS的Scope和Digest
Angular是一个成熟和强大的JavaScript框架.它也是一个比较庞大的框架,在熟练掌握之前,需要领会它提出的很多新概念.很多Web开发人员涌向Angular,有不少人面临同样的障碍.Diges ...
- Xamarin Essentials应用教程文件系统FileSystem
Xamarin Essentials应用教程文件系统FileSystem 文件系统用于管理设备内的各类文件.通过文件系统,应用程序可以创建永久文件和临时文件,也可以获取预先打包的文件,如预设数据库文件 ...
- VMware5.5-添加数据中心,集群及主机
首先介绍下硬盘的三种设置格式,这个要搞清楚 虚机硬盘的三种格式 厚置备延迟置零 厚置备,分配10g空间,虚拟机没开机时就分配了: 延迟置零,没开机之前只分配空间,里面的数据不抹零,当开机写入数据时再抹 ...
- Codeforces.1051G.Distinctification(线段树合并 并查集)
题目链接 \(Description\) 给定\(n\)个数对\(A_i,B_i\).你可以进行任意次以下两种操作: 选择一个位置\(i\),令\(A_i=A_i+1\),花费\(B_i\).必须存在 ...
- ES6快速入门(三)类与模块
类与模块 一.类 一)类的声明 class Person { constructor(name) { this.name = name; } sayName() { console.log(this. ...
- Charles通用破解激活办法
Charles通用破解激活办法 适用于Charles任意版本的注册码,谁还会想要使用破解版呢. 目前最新版Charles 4.2.8. Registered Name: https://zhile.i ...
- 基于socket构造c/s 架构软件
1.socket作用 socket层介于应用层和传输层之间,它起着连接应用层和传输层的功能,同时它能连接应用层和网络层. socket把复杂的tcp/ip协议隐藏在socket接口后面,对用户来说,一 ...
- Flask特殊装饰器
@app.errorhandler():重定义错误返回信息 @app.errorhandler(404) #监听多少写多少 def error404(message): return f"你 ...