需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录。现在写一个存储过程实现,如果活动过期,就将关联表里面的数据标记删除。

1、代码如下:

BEGIN
/*
用途:每天23:00执行一次,处理“开屏广告”和“门店主页”关联设备信息,如果当前时间活动已过期,及将表下关联记录标记为已删除状态
*/ #定义变量
DECLARE done INT;#游标标记
DECLARE timestampTmp INT;#当前时间戳
DECLARE ad_id INT;#需要清除的广告活动id
DECLARE ad_ad_type INT;#广告类型1
DECLARE ad_ad_location INT;#广告类型2
DECLARE devices_ad INT;#设备关联表需要清除的广告活动id
DECLARE err INT; #是否有sql错误 #创建游标,并且存储数据,获取未处理,已结束的广告活动id
DECLARE cur_ad CURSOR
FOR
SELECT id,ad_type,ad_location FROM t_ad WHERE is_handle = 0 AND end_time < timestampTmp LIMIT 500; #游标中的内容执行完后将done设置为1
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
#检查sql是否有错
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err=1; #赋值当前时间
SET timestampTmp = UNIX_TIMESTAMP(); #打开游标
OPEN cur_ad; #执行循环
posLoop:LOOP #游标结束或者SQL错误,结束循环
IF done = 1 or err = 1 THEN
LEAVE posLoop;
END IF; #取游标中的值
FETCH cur_ad INTO ad_id,ad_ad_type,ad_ad_location; #查询数据,判断是否需要修改
SELECT COUNT(1) INTO devices_ad FROM t_shake_devices_relation WHERE relation_id = ad_id AND is_deleted = 0; #存在即修改
IF devices_ad > 0 THEN
UPDATE t_shake_devices_relation SET is_deleted = 1 WHERE relation_id = ad_id; #修改成功后标记t_ad表为已处理
IF ROW_COUNT() > 0 THEN
UPDATE t_ad SET is_handle = 1 WHERE id = ad_id;
END IF; END IF; #结束循环
END LOOP posLoop; #释放游标
CLOSE cur_ad;
END

MySQL数据篇(九)--存储过程实现定时每天清理过期数据的更多相关文章

  1. MySQL数据篇(八)-- 存储过程的简单实现

    思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现.如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行 ...

  2. MySQL数据篇 (一)存储过程实现简单的数据修改及事务的使用

    1.需求,手动给会员新增京币,并且添加分配日志,返回修改是否成功 CREATE DEFINER=`jszapi`@`%` PROCEDURE `p_allot_user_coin`(IN `_memb ...

  3. Python学习日记(四十一) Mysql数据库篇 九

    前言 索引的主要作用是起到约束和加速查找,ORM框架(sqlalchemy)是用类和对象对数据库进行操作 索引的种类 按种类去分 1.普通索引:能够加速查找 2.主键索引:能够加速查找.不能为空.不能 ...

  4. MySQL数据篇(五)--SQL对数据进行按月统计,或对数据进行按星期统计

    对于所有的需求,当你不知道怎么处理的时候,你就先用最简单的方法,或者说的明白一点,用最原始的方法,先实现业务需求再说. 一.对提现队列数据表“ims_checkout_task”进行汇总统计,按月汇总 ...

  5. linux定时备份mysql数据并同步到其他服务器

    (备份还原操作) ###导出数据库 /usr/bin/mysqldump -u root -pwd database > database20180808.sql ###导入数据库 mysql ...

  6. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(云端电脑(Windows)安装配置数据库,使用本地Navicat for MySQL和手机APP 远程连接测试)

    3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试) 根据前面的教程把软件复制到云 ...

  7. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(安装配置数据库,使用Navicat for MySQL和手机APP 连接测试)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(数据库简单说明) https://www.mysql.com/ 咱用安装版的 我把自己下载的放在了这里 现在 ...

  8. python mysql 视图 触发器 事物 存储过程 用户授权 数据备份还原

    ###################总结########### 视图是一个虚拟表(非真实存在) 是跑在内存中的表,真实表是在硬盘上的表 使用视图我们可以把查询过程中的临时表摘出来,保存下来,用视图去 ...

  9. 几篇关于MySQL数据同步到Elasticsearch的文章---第四篇:使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch

    文章转载自: https://www.cnblogs.com/dalaoyang/p/11018541.html 1.go-mysql-elasticsearch简介 go-mysql-elastic ...

随机推荐

  1. mongodb 简单的增删改查

    增加 语法: db.collectionName.insert({json对象}); 1. 增加单个文档,json对象格式 db.user.insert({name:'lee',age:23,sex: ...

  2. 针对base64编码和URIEncode的一点研究

    Base64编码的作用 将任意的二进制比特串编码成由ASCii码中的64个可显示字符组成的字符串. 为什么需要base64编码? 所有的文件,本质上都是0.1组成的比特串,文本文件.二进制文件的区别只 ...

  3. .NET Core和无服务器框架

    无服务器框架是一个云提供商无关的工具包,旨在帮助构建,管理和部署无服务器组件的操作,以实现完整的无服务器架构或不同功能即服务(FaaS).无服务器框架的主要目标是为开发人员提供一个界面,该界面抽象出云 ...

  4. 深入了解angularjs中的$digest与$apply方法,从区别聊到使用优化

     壹 ❀ 引 如果有人问,在angularjs中修改模型数据为何视图会同步更新呢,我想大多数人一定会回答脏检查(Dirty Checking)相关概念.没错,在angularjs中作用域(scope) ...

  5. mysql主从同步问题梳理

    前言: MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题: 1) ...

  6. gradle环境搭建

    最近我在尝试了解跨平台技术的发展,首先则是想到了cordova.环境配置过程中有依赖gradle,下面简单记录了在windos10系统下搭建gradle环境的过程. 什么是gradle Gradle是 ...

  7. Eureka+SpringBoot2.X结合Security注册中心安全验证

    当我们直接配置完SpringCloudEureka的时候,任何人直接就可以访问,这样是极不安全的!!外网的情况下是绝对不允许的! 好在有提供了解决方案,下面拿为我们提供的Security解决 Spri ...

  8. vue element之axios下载文件(后端Python)

    axios 接受文件流,需要设置 {responseType:'arraybuffer'} axios.post( apiUrl, formdata, {responseType:'arraybuff ...

  9. Redis面试篇 -- Redis常见性能问题和解决方案?

    master最好不要做任何的持久化工作,如RD内存快照或者AOF日志文件: 如果数据比较重要,某个slave开始AOF备份数据,策略设置为每秒同步1次: 为了主从复制的速度和连接的稳定性,master ...

  10. js-函数的三种创建方式

    1.声明式 function fn() { //do something } 2.函数表达式 let fn = function () { //do something } 3.构造函数 functi ...