mysql创建定时任务_mysql创建定时任务
use mis;
CREATE TABLE mis.aaa(timeline TIMESTAMP);
CREATE EVENT e_test_insert
ON SCHEDULE EVERY 1 second #1秒触发⼀次
DO INSERT mis.aaa VALUE(CURRENT_TIMESTAMP);
drop event e_mc_timer_insert;
CREATE EVENT e_mc_timer_insert
ON SCHEDULE EVERY 1 DAY STARTS DATE_ADD(CURDATE(), INTERVAL (60*1) minute) #10点触发每天
DO insert into _timer values (uuid() , sysdate(),sysdate(),sysdate(),200,'MOVIE' )
;
show variables like '%event_sche%';
set global event_scheduler=1;
⼀、说明
后台周期定时任务可以有多种解决⽅案,我所知道的⼤概有以下⼏种:后台框架⾃带定时任务。⽐如php中的Laravel框架⾥有提供定时任务操作接⼝,其他的框架⼤家可以单独针对了解。
服务器操作系统层⾯的定时。通常我们的服务器主要基于两⼤平台,⼀个windows server,它的定时任务系统有提供的。Linux下也有,通常流⾏的是crontab⼯具实现的(想了解这⾥有个视频教程),但是crontab的定时任务通常定时操作脚本这样的⽂件,⽽直接定时操作数据库的就⽐较⿇烦了。但是也有解决办法,就是在服务器端写⼀个get请求url,在后台⾥完成要定时完成的数据库操作,这样我们只要实现定时访问该接⼝就⾏了,Linux下的curl命令可以很⽅便发出get请求,我们只要写个包含访问该接⼝的脚本,再结合crontab就可以完成后台数据的定时更新操作了。correlate with
但是毕竟写个接⼝安全性不是太⾼,⽽⼤家⽤的如果是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
2
[mysqld]
event_scheduler=ON //这⼀⾏加⼊mysqld标签下
2、创建procedure(存储过程)
什么是procedure(存储过程)?
存储过程?当我听到这个词的时候,以为它是mysql存储数据的⼀个流程⽽不是⼀个名词,但是当我⽹上了解时,才知道这个词是翻译过来的,原⽣词为Procedure,实际上它的含义就是相当于我们⾯向对象⾥的⽅法或者说是函数,在它⾥⾯可以完成多个sql语句的操作,并且可以定义参数传值等,与⼀般的单条sql语句的区别主要在这⾥。
详细了解: 点我
创建存储过程
1
2
3
4
winform滚动条5
6
7
use test;
delimiter //
create procedure test_proce()
begin
insert into weuse(name,created_at,updated_at) values('hello',now(),now());
end//
delimiter ;
enter image description here
如何制作下拉菜单
上⾯的代码说明:
use test; 这个谁都知道,使⽤某个数据库,这⾥要强调的是存储过程⼀定是对于某个数据库⽽⾔的,所以必须要选中⼀个数据库才能创建成功。
delimiter // 这个是将mysql中以;(分号)结尾的规定修改为以//(双斜杠)为语句结束符,因为存储过程⾥可以有多条sql 语句,⾥⾯的sql语句都以;号结尾,如果回车了那么系统会当做sql语句直接执⾏了,我们希望的是先定义这⼀系列sql语句⽽先不执⾏,所以要改下操作结束符。当然你在改后⼀定要改回来,⼤家可以看到最后⼀⾏有对应的修改回来的语句。
下⾯的是⼀起输⼊的,可以知道分别是创建存储过程test_proce(),名称可以随便起的,然后是在begin –end之间是定义⼀系列sql语句的就可以了,记住最后end结尾要以之前修改后的结尾符结束。
1
2
3
4
create procedure test_proce()
begin
insert into weuse(name,created_at,updated_at) values('hello',now(),now());
end//
3、创建定时任务
上⾯创建存储过程实际上是为定时任务做铺垫的,因为上⾯只说明了怎么创建存储过程,但是未说明怎么调⽤,那这⾥就⽤到了调⽤存储过程了。
创建定时任务event(事件)
1
2
3
4
create event second_event
on schedule every 1 second
on completion preserve disable
do call test_proce();
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
2
alter event second_event on completion preserve enable;//开启定时任务
alter event second_event on completion preserve disable;//关闭定时任务
当我们⽤第⼀句命令开启定时任务时,可以就可以查看数据库情况,已经实现了每秒钟执⾏⼀次了,如图。javaswing教材
enter image description here
要想关闭定时任务只要执⾏上⾯的第⼆句命令,关闭需要关闭的定时任务就可以了。
5、常见周期定时规则
周期执⾏–关键字 EVERY
单位有:second,minute,hour,day,week(周),quarter(季度),month,year
如:
1
2
3
mysql查看所有存储过程on schedule every 1 second //每秒执⾏1次
on schedule every 2 minute //每两分钟执⾏1次
on schedule every 3 day //每3天执⾏1次
在具体某个时间执⾏–关键字 AT
如:
1
2
3
on 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
2
on 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
mysql中的count函数2
SELECT * FROM information_schema.EVENTS;//查看所有事件属性
SELECT event_name,event_definition,interval_value,interval_field,status FROM information_schema.EVENTS;//查看主要⼏个属性
enter image description here
Navicat
这个是收费的软件,但是可视化操作⽐较轻量级,功能也很多,它可以可视化操作存储过程和Event事件,详细操作⼤家可以⾃⼰摸索啊!!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。