mysql 定时计划_MYSQL定时任务

欢迎大家加入,一起讨论学习

这里我们要完成的定时任务,比较简单

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

第一步:我们先创建一个表和插入数据

/*创建一个表*/

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=MyISAMDEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci

CHECKSUM=0DELAY_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');

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

看看效果:

80481ffe2e65d8545574ad95c208e09a.pngwAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

ok,表和数据做好了,我们说一下需求:

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

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

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

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

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

SHOW VARIABLES LIKE 'event_scheduler' #查看状态

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

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

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

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

封装一个函数

封装一个事件

事件开始运行,满足条件,调用 1(封装的函数)

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

#写一个函数 begin------------

CREATE PROCEDUREtest()BEGIN

update test_name SET integral= integral + 1 WHERE is_adm = 1;END;

#写一个函数end------------

运行以上代码成功之后,大家不用提心吊胆,不会立刻修改你的数据,因为这里只是封装了一个函数,我们并没有调用它,它仅仅是存在。所以需要写一个事件,来调用它

#写一个事件 begin------------

create event if not existse_teston schedule every 2secondoncompletion preserve

do call test();

#写一个事件end------------

运行以上代码,成功之后,大家也别着急,还不会立刻运行此事件。虽然在上面,我们已经开启了event。但是我们还要单个来运行,指定一个事件来运行,就跟访问接口一样,指定一个接口。。。

#开启事件alter event e_test ONCOMPLETION PRESERVE ENABLE;

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

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

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

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

#关闭事件alter event e_test ONCOMPLETION PRESERVE DISABLE;

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

运行之后,就会停止对 e_test 事件的使用

以上需要注意:

event默认情况下,都是OFF关闭状态,在MYSQL配置里可以找到,如果你在配置里修改成ON,就会默认成ON了

关闭数据库之后,如果你的event还是OFF,也会因为配置里默认的OFF因为,而停止

当event关闭之后,你的单个事件属于开启状态,那么当你开启event之后,单个事件状态依旧是开启的

如果你要关闭某个事件,请使用最后一个“关闭事件”的代码来关闭,不要使用event关闭,会影响到其他的事件

event如同是总闸,关闭之后,所有定义的事件断电

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值