扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
mySql 5.1版本以上有一个event事件,可以让它在0点时自动运行,实现步骤如推荐的答案,但是我建议你直接用heidiSQL,很快就生成了
创新互联是一家集成都网站制作、做网站、网站页面设计、网站优化SEO优化为一体的专业网络公司,已为成都等多地近百家企业提供网站建设服务。追求良好的浏览体验,以探求精品塑造与理念升华,设计最适合用户的网站页面。 合作只是第一步,服务才是根本,我们始终坚持讲诚信,负责任的原则,为您进行细心、贴心、认真的服务,与众多客户在蓬勃发展的市场环境中,互促共生。
mysql好像没有定时执行功能,只有触发器,如果在linux下可以用crontab 定时触发一个事件,事件就是执行mysql的存储过程,可以用bash或perl脚本写。
事件调度器是定时触发执行的,在这个角度上也可以称作是临时的触发器。触发器只是针对某个表产生的事件执行一些语句,而事件调度器则是在某一个(间隔)时间执行一些语句。事件是由一个特定的线程来管理的,也就是所谓的事件调度器。
代码:/*开启event_scheduler,也可以设置为on*/
set global event_scheduler =1;
/*创建简单的任务,每分钟执行一次,从一个表取数据插入到另一个表,也可以定时取,可以参看下面文档,此处为简单例子*/
CREATE EVENT MyEvent
ON SCHEDULE EVERY 1 MINUTEDOINSERT INTO list_test (字段1,字段1,字段1,字段1,字段1) select 字段1,字段1,字段1,字段1,字段1 from 表2 where id = 510;
/*每天固定时间执行*/
CREATE EVENT EVENT_ADD_FOR20_ENOUGH
ON SCHEDULE EVERY 1 DAY
DROP PROCEDURE IF EXISTS `mystock`.`TEST_KKK`$$
CREATE PROCEDURE `mystock`.`TEST_KKK`()
/*LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'*/BEGINDECLARE NUM INTEGER DEFAULT 0;
DECLARE $A INT;
SELECT (20-COUNT(STOCK_CODE)) as number into NUM FROM get_stock_list WHERE FLAG = 0 AND STIME = curdate();
IF NUM0 THEN
PREPARE STMP FROM 'INSERT INTO get_stock_list (stock_code,stock_name,close,raises,stime) select stock_code,stock_name,close,result1,selectd from choice_stock where stock_code not in (select stock_code from get_stock_list where stime = curdate() and flag = 0) and selectd = curdate() and selectd = curdate() order by id limit ?' ;
查看event是否开启
代码如下
show
variables
like
'%sche%';
将事件计划开启
代码如下
set
global
event_scheduler
=1;
创建存储过程test
代码如下
CREATE
PROCEDURE
test
()
BEGIN
update
examinfo
SET
endtime
=
now()
WHERE
id
=
14;
END;
创建event
e_test
代码如下
create
event
if
not
exists
e_test
on
schedule
every
30
second
on
completion
preserve
do
call
test();
每隔30秒将执行存储过程test,将当前时间更新到examinfo表中id=14的记录的endtime字段中去.
关闭事件任务
代码如下
alter
event
e_test
ON
COMPLETION
PRESERVE
DISABLE;
开户事件任务
代码如下
alter
event
e_test
ON
COMPLETION
PRESERVE
ENABLE;
以上测试均成功,测试环境为mysql
5.4.2-beta-community
mysql
community
server(GPL)
以上的相关内容就是对MySQL定时执行的介绍,望你能有所收获。
mysql
计划任务重启后消失
我们只要修改一配置即可
event_scheduler在mysql的config中设置为OFF有关。去mysql中将配置改为ON则就搞定了。
mysql实现定时任务是有一个时间调度器,所以首先要查看这个时间调度器是否开启。
查看的命令:
show variables like 'event_scheduler'
如果没有打开,则设置打开。设置的命令是:
set global event_scheduler = ON; 或set global event_scheduler = 1;
确定打开事件调度器后,我们可以创建一个定时任务。
创建定时任务的语法为:
create event 定时任务名称
ON schedule 定时时间
do
定时任务所要执行的sql;
example:每隔一分钟往表tt里插入一条数据
create event insert_tt
ON schedule every 1 MINUTE
do
insert into tt values(1);
如果要执行多条sql则可用多个do
create event insert_tt
ON schedule every 1 MINUTE
do
insert into tt values(1);
do
.......
使用命令查看所有的定时任务及其状态:
show processlist
如果要停掉某个定时任务可以使用:
alter event 定时任务名 ON
COMPLETION PRESERVE DISABLE;
example:
alter event insert_tt ON
COMPLETION PRESERVE DISABLE;
开启某个定时任务:
alter event 定时任务名称 ON
COMPLETION PRESERVE ENABLE;
最常用的做法是使用UNIX的cron直接执行Java程序。
并不需要在Java做的那么复杂。
Windows服务器也有类似于cron的任务管理功能,同理
---------------------------
Tomcat不是用来管理定时任务的,如果没有HTTP请求,Servlet是不会被执行的。
建议lz把定期执行的处理做成一个独立的Java程序,用cron执行。
如果不想写独立的Java程序,也可以用cron定期向Tomcat发送Http请求,但是,这样做的话注意程序处理时间不能太长,因为HTTP通信有timeout的制约。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流