MYSQL定时任务

点击连接加入群【php/web 学习课堂】:https://jq.qq.com/?_wv=1027&k=5645xiwphp

 

欢迎你们加入,一块儿讨论学习web

 

这里咱们要完成的定时任务,比较简单数据库

效果:每过X秒 某一些用户积分 加Xapp

 

第一步:咱们先建立一个表和插入数据函数

/* 建立一个表 */
CREATE TABLE `test_name` (
`id`  int(11) NOT NULL AUTO_INCREMENT COMMENT '主键,自增' ,
`user_name`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '用户名' ,
`integral`  int(11) NULL COMMENT '积分' ,
`is_adm`  tinyint(1) NULL COMMENT '管理员,1-是,0-不是' ,
PRIMARY KEY (`id`)
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
CHECKSUM=0
DELAY_KEY_WRITE=0
;

/* 添加数据 */
INSERT INTO `test_name` VALUES ('1', '会员1', '0', '1');
INSERT INTO `test_name` VALUES ('2', '会员2', '0', '0');
INSERT INTO `test_name` VALUES ('3', '会员3', '0', '0');

 

看看效果:学习

 

ok,表和数据作好了,咱们说一下需求:spa

需求1:没通过2秒管理员的积分加1,字段is_adm为1的则是管理员.net

 

以上为添加表和数据,并提出需求code

--------------------------------分割线--------------------------------blog

如下内容,咱们会提到如何启动定时任务,来完成咱们的需求

 

首先第一步,咱们要检查咱们数据库,是否开启了event(事件)

SHOW VARIABLES LIKE 'event_scheduler' #查看状态

 

运行以上代码,若是你的结果,Value字段的值为"OFF",表明你的事件属于关闭状态,那么咱们就要开启它,运行如下代码:

SET GLOBAL event_scheduler = ON;  #ON开启,OFF关闭

运行以后,再返回上一个,再次检查事件的状态,当结果为"ON",则表明你的事件已开启,咱们就继续往下走。。

 

既然是定时任务,那么咱们就要封装一个函数,流程是这样的:

  1. 封装一个函数
  2. 封装一个事件
  3. 事件开始运行,知足条件,调用 1(封装的函数)

那么咱们先来封装一个函数:

#写一个函数  begin------------
CREATE PROCEDURE test() 
BEGIN 
update test_name SET integral= integral + 1 WHERE is_adm = 1; 
END; 
#写一个函数  end------------

 

运行以上代码成功以后,你们不用提心吊胆,不会马上修改你的数据,由于这里只是封装了一个函数,咱们并无调用它,它仅仅是存在。因此须要写一个事件,来调用它

#写一个事件  begin------------
create event if not exists e_test 
on schedule every 2 second 
on completion preserve 
do call test(); 
#写一个事件  end------------

 

运行以上代码,成功以后,你们也别着急,还不会马上运行此事件。虽然在上面,咱们已经开启了event。可是咱们还要单个来运行,指定一个事件来运行,就跟访问接口同样,指定一个接口。。。

#开启事件
alter event e_test ON 
COMPLETION PRESERVE ENABLE; 

这里能看见,开启事件,指定的是 e_test 这个事件名字,跟咱们上面建立的是同样的,那么运行这一段代码以后,你会发现,你的表 test_name 里,is_adm = 1 的行,字段为 integral(积分) 的会每 2秒 加1

 

那么一个简单的定时任务,咱们完成了。

噢,对了,关闭单个事件,使用如下的代码:

#关闭事件
alter event e_test ON 
COMPLETION PRESERVE DISABLE; 

运行以后,就会中止对 e_test 事件的使用

以上须要注意:

  • event默认状况下,都是OFF关闭状态,在MYSQL配置里能够找到,若是你在配置里修改为ON,就会默认成ON了
  • 关闭数据库以后,若是你的event仍是OFF,也会由于配置里默认的OFF由于,而中止
  • event关闭以后,你的单个事件属于开启状态,那么当你开启event以后,单个事件状态依旧是开启的
  • 若是你要关闭某个事件,请使用最后一个“关闭事件”的代码来关闭,不要使用event关闭,会影响到其余的事件
  • event如同是总闸,关闭以后,全部定义的事件断电
相关文章
相关标签/搜索