MySQL数据篇(九)-[通俗易懂]

MySQL数据篇(九)-[通俗易懂]需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录。现在写一个存储过程实现,如果活动过期,就将关联表里

需求:有一个活动记录表 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

代码100分

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10901.html

(0)
上一篇 2022-12-19
下一篇 2022-12-20

相关推荐

  • 快速获取Python字典value对应的key

    快速获取Python字典value对应的key
    在Python编程中,字典(Dictionary)是一种非常常用且非常有用的数据结构。它可以储存键值(key-value)对,方便我们使用键(key)来快速找到值(value)。然而,在实际开发中,我们有时需要根据字典的值来获取与之对应的键,而这又是一个比较常见的问题。本文将介绍几种快速获取Python字典value对应的key的方法,以及它们的适用场景和性能比较。

    2024-03-02
    69
  • centos安装mysql5.7

    centos安装mysql5.7切换yum源网易yum源:wget-O/etc/yum.repos.d/CentOS-Base.repohttp://mirrors.163.com/.help/CentOS7-Base-163.r…

    2023-04-04
    133
  • Python中的无穷大

    Python中的无穷大随着计算机科学的不断进步,越来越多的应用程序需要处理非常大或者非常小的数字。Python作为一种强大的编程语言,在数字计算方面具有丰富的类型和功能。其中一种非常重要的类型就是无穷大。

    2024-05-09
    47
  • elasticsearch安装配置windows_elasticsearch安装配置

    elasticsearch安装配置windows_elasticsearch安装配置没错,从零开始的elasticsearch搭建教程开始了!h'h ** 原文:https://www.cnblogs.com/heermayou/p/12670662.html 那么

    2023-02-16
    111
  • sqlserver学习

    sqlserver学习一、什么是关系型和非关系型数据库,两者都包含那种数据库 1、关系型数据库 关系型数据库是指采用了关系模型来组织数据的数据库。简单来说,关系模式就是二维表格模型。 常见关系型数据库管理系统(ORDBMS

    2023-06-08
    118
  • Oracle中的函数——Row_Number()「建议收藏」

    Oracle中的函数——Row_Number()「建议收藏」row_number() 核心语句如下: over(partition by colum1 order by colum2 (colum2 可以等于colum1 )desc) ow_number函数返

    2023-02-20
    141
  • MySQL数据库:在命令提示符中使用mysql

    MySQL数据库:在命令提示符中使用mysql服务启动 在命令提示符中 启动mysql服务 net start mysql 停止mysql服务 net sotp mysql 通过命令行进入 mysql u 用户名 p 键入后会提示输入密码 如果不

    2022-12-21
    134
  • python中退出for循环的命令

    python中退出for循环的命令a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-04-29
    50

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注