最近做了一个招聘的项目,在项目中有一个定时下线的需求。在做之前我一直在考虑到底使用window 服务,还是使用调度,最终我选择使用mysql定时事件,因为这样简单方便。

思路:首先创建一个存储过程,通过游标遍历更新对应的岗位状态,让后在创建定时事件,废话不多说直接上代码

首先创建存储过程:

CREATE DEFINER = CURRENT_USER PROCEDURE `TimedDownLine`()
BEGIN
-- 声明变量(用于插入数据)
DECLARE PostID INT;#岗位ID
DECLARE DifferDay INT;#相差天数
DECLARE done INT DEFAULT ;#判断是否存在信息的依据0表示存在数据 DECLARE Integral_cursor cursor for SELECT id,TIMESTAMPDIFF(DAY, ReleaseEnd, now()) AS intervalday FROM postrelease WHERE PostType=;#查询所有在线的岗位信息(1表示在线岗位,2表示下线岗位) DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = ;#没有数据返回更改状态为1 -- 打开游标
OPEN Integral_cursor;
#开始循环
WHILE done= DO #REPEAT
#游标赋值(游标只会向下执行)
FETCH Integral_cursor INTO PostID,DifferDay;
IF(done=&&DifferDay>)
THEN UPDATE postrelease SET PostType= where ID=PostID;
end IF;
#循环结束
#UNTIL done= END REPEAT;
END WHILE;
SET done=;#更改状态,表示循环结束
-- 关闭游标
END

创建数据库事件:

#查看数据库事件是否开启
SHOW VARIABLES LIKE 'event_scheduler'
show variables like '%event%';
#设置当前事件开启
SET GLOBAL event_scheduler = ;
#查看定时任务
select * from mysql.event;
SELECT * FROM information_schema.events;
#每天凌晨开始执行
select DATE_ADD(DATE_ADD(CURDATE(), INTERVAL DAY), INTERVAL HOUR)
#关闭定时任务
DROP event temp_event; #每天凌晨开始执行(创建定时事件)
CREATE EVENT IF NOT EXISTS TimeDownlines_event
ON SCHEDULE EVERY DAY STARTS DATE_ADD(DATE_ADD(CURDATE(), INTERVAL DAY), INTERVAL HOUR)
ON COMPLETION PRESERVE ENABLE #到点开启定时任务
DO CALL TimedDownLine();

  这样只写对于一些业务相对于没有复杂的定时任务完全可以应对,而且开发快捷,下次有时间会把window 服务的定时任务写上。

使用mysql事件定时执行岗位七天下线任务的更多相关文章

  1. mysql创建定时执行存储过程任务

    sql语法很多,是一门完整语言.这里仅仅实现一个功能,不做深入研究. 目标:定时更新表或者清空表. 案例:曾经做过定时清空位置信息表的任务.(然而,当时并未考虑服务器挂掉后的情况) 本次测试:每5s更 ...

  2. mysql创建定时执行存储过程任务实现订单定时关闭

    CREATE PROCEDURE `tableName`.`procedureName`() LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECUR ...

  3. mysql事件定时

    DELIMITER $$ MONTH STARTS '2013-01-07 11:20:00' ON COMPLETION PRESERVE ENABLE DO BEGIN CALL ps(); EN ...

  4. MySQL事件的先后

    今天闲聊之时 提及MySQL事件的执行,发现一些自己之前没有注意的细节 如果在执行事件过程中,如果insert的存储过程发生意外 会如何 USE iot2; CREATE TABLE aaaa (ti ...

  5. mysql定时计划任务,ON COMPLETION [NOT] PRESERVE 当单次计划任务执行完毕后或当重复性的计划任务执行到了ENDS阶段。而声明PRESERVE的作用是使事件在执行完毕后不会被Drop掉

    当为on completion preserve 的时候,当event到期了,event会被disable,但是该event还是会存在当为on completion not preserve的时候,当 ...

  6. mysql命令行创建存储过程命令行定时执行sql语句

    mysql -uroot -p show databases; use scm; show tables; show procedure status; 其他命令: SHOW VARIABLES LI ...

  7. MySQL定时执行脚本(计划任务)命令实例

    在mysql中我们可以直接进行一些参数设置让它成定时为我们执行一些任务了,这个虽然可以使用windows或者linux中的计划任务实现,但是mysql本身也能完成 查看event是否开启 复制代码 代 ...

  8. mysql事件调度器定时删除binlog

    MySQL5.1.6起Mysql增加了事件调度器(Event Scheduler),可以用做定时执行某些特定任务,来取代原先只能由Linux操作系统的计划任务来执行的工作MySQL的事件调度器可以精确 ...

  9. 定时备份 MySQL 并上传到七牛

    多数应用场景下,我们需要对重要数据进行备份.并放置到一个安全的地方,以备不时之需. 常见的 MySQL 数据备份方式有,直接打包复制对应的数据库或表文件(物理备份).mysqldump 全量逻辑备份. ...

随机推荐

  1. python自定义库文件路径

    各有各的小烦恼,各有的小期待 这是人家私事,不要大嘴巴 在Pycharm中import whois时,总是失败 原因是安装了python3.x相关操作过程,将环境变量path中关于Python的配置c ...

  2. Java 读书笔记 (十四) Java 方法

    finalize() 方法 finalize() 用来清除回收对象.  //为什么要回收内存?怎样写可以避免内存过多占用?什么时候需要手动回收内存? protected void finalize() ...

  3. NET Core 跨平台执行命令、脚本

    一.前言 我们可能会遇到需要在程序中执行一些系统命令,来获取一些信息:或者调用shell脚本..NET Core 目前已经可以跨平台执行,那么它如何跨平台执行命令呢,请看下面的讲解. 二.Proces ...

  4. LNMP单点服务器搭建

    一.部署服务器环境 Linux:centos6.5 nginx:1.14.0 mysql:5.6.33 php:5.6.36 1.网络配置 2.FQDN /etc/hosts /etc/sysconf ...

  5. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士

    Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...

  6. BZOJ_3173_[Tjoi2013]最长上升子序列_splay

    BZOJ_3173_[Tjoi2013]最长上升子序列_splay Description 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.每插入一个数 ...

  7. laravel 中的rbac自己简单的实现

    用户表 CREATE TABLE `sys_user` ( `id` varchar(64) COLLATE utf8_bin NOT NULL COMMENT '用户编号', `ids` int(1 ...

  8. volatile可见性的一些认识和论证

    一.前言 volatile的关键词的使用在JVM内存模型中已是老生常谈了,这篇文章主要结合自己对可见性的一些认识和一些直观的例子来谈谈volatile.文章正文大致分为三部分,首先会介绍一下happe ...

  9. 将本地文件传输到GitHub

    统一概念: 工作区:增删文件和内容 暂存区:键入命令 git add 改动的文件,此次改动就放到了 『暂存区』 本地仓库 :键入命令 git commit ,此次改动就放到了『本地仓库』,每个 com ...

  10. Java语言编程 - Java第一个程序HelloWorld

    3.1 新建Java文件 首先新建一个文件夹,用于存放写的Java程序,例如我存放Java程序的位置为” D:\Files\code\java”. 在该文件夹中,右键新建一个文本文档 将文件名重命名为 ...