0
点赞
收藏
分享

微信扫一扫

存储过程的简单实现

芷兮离离 2022-04-14 阅读 78
mysql

#博学谷IT学习技术支持#

前言

思考:一般我们的数据都是存储在数据库里面,对于常规的CRUD操作都是用代码实现,比如使用PHP做项目,所有的数据处理都需要主动操作代码实现。如果我们现在有一项目,业务需要在用户下单后,对用户的订单进行分润处理,比如在每个月的21号,对上个月所有的订单按设置的规则进行分润处理,当然shll脚本也可以实现,但是今天我们说的是如何通过数据库“存储过程”和“事件”来实现。


一、简单介绍

1. 初次理解
2. 官方如是说

在这里插入图片描述

3. 例如我们数据库工具上的
4.如下

在这里插入图片描述

二、简单的需求。

1. 需求说明
2. 数据库如下

在这里插入图片描述

3. 新建一个过程

在这里插入图片描述

4. 具体SQL代码。代码大致说明一下:
5. sql代码如下
BEGIN
    #处理t_user如果type = 1,则将num修改为200
    
    #定义变量
    DECLARE done int;#定义游标标记
    DECLARE t_id int;#定义需要处理的id值
    DECLARE t_type int;#定义记录值类型
    
    #创建游标,并存储数据
    DECLARE cur_test CURSOR
            FOR
            SELECT id,type FROM t_user LIMIT 500;
    
    #游标中的内容执行完后将done设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    #打开游标
    OPEN cur_test;
    
    #执行循环
    posLoop:LOOP
    
        #判断是否结束循环
        IF    done = 1 THEN
                LEAVE    posLoop;
        END IF;

        #取游标中的值
        FETCH cur_test INTO t_id,t_type;
        
        #如果type = 1,则将num修改为200
        IF t_type = 1 THEN
                #执行更新操作
                UPDATE t_user SET num = 200 WHERE id = t_id;
        END IF;

    #结束循环
    END LOOP posLoop;
    
    #释放游标
    CLOSE cur_test;
END
6. 创建 “事件”调用写好的过程 p_t3()。调用 存储过程 一般用 CALL + 过程名。

在这里插入图片描述

7. 点击保存时,可能提示 “event_scheduler = OFF” 未开启,我们开启下即可,指令如下。注意,每次重启MySQL后,该值会设为 off 需要重新开启一下。
#查看是否开启
SHOW VARIABLES LIKE  'event_scheduler'
#开启
SET GLOBAL event_scheduler = ON;
#关闭
SET GLOBAL event_scheduler = OFF;

最后:只要数据库服务开启,每分钟都会调用一次p_t3(),实现里面的业务规则。

举报

相关推荐

0 条评论