MySQL自定义函数与存储过程的创建、使用、删除

  前言

  日常开发中,可能会用到数据库的自定义函数/存储过程,本文记录MySQL对自定义函数与存储过程的创建、使用、删除的使用

  

  通用语法

  事实上,可以认为存储过程就是没有返回值的函数,创建/使用/删除都非常相似,在Navicat可视化工具中,自定义函数/存储过程都归类为函数

  定义变量

-- 定义变量,以及赋默认值0
DECLARE c INT(2) DEFAULT(0);

  设置变量

-- 设置变量值
SET c = c + 1;

  流程控制

-- 流程控制,多条件使用 AND/OR
IF c < 0 OR c = 0 THEN
    set c = 0;
ELSEIF c IS NULL THEN
    set c = 0;
ELSE
    set c = c;
END IF;

  循环语句

-- 循环语句
WHILE c <= 10 DO

    SET c = c + 1;
END WHILE;

  自定义函数

  创建

-- 创建函数
DROP FUNCTION IF EXISTS test_fun;
CREATE FUNCTION test_fun ( a INT(2), b INT(2) ) RETURNS INT(2) BEGIN
    -- 定义变量,以及赋默认值
    DECLARE c INT(2) DEFAULT(0);
    DECLARE i INT(2) DEFAULT(1);
    
    -- 流程控制
    IF a < 0 OR b < 0 THEN
        set a = 0;
        set b = 0;
    ELSEIF a IS NULL AND b IS NULL THEN
        set a = 0;
        set b = 0;
    ELSE
        set a = a;
        set b = b;
    END IF;
    
    -- 设置变量值
    SET c = a + b;
    
    -- 循环
    WHILE i <= 10 DO
        SET c = c + i;
        
        SET i = i + 1;
    END WHILE;

    -- return返回值
    RETURN c;
END;

  使用

-- 使用函数
SELECT test_fun ( 1, 2 );

  删除

-- 删除函数
DROP FUNCTION test_fun;

  存储过程

  创建

-- 创建存储过程
DROP PROCEDURE IF EXISTS test_pro;
CREATE PROCEDURE test_pro ( a INT(2), b INT(2) ) BEGIN
    -- 定义变量,以及赋默认值
    DECLARE c INT(2) DEFAULT(0);
    
    -- 流程控制
    IF a < 0 OR b < 0 THEN
        set a = 0;
        set b = 0;
    ELSEIF a IS NULL AND b IS NULL THEN
        set a = 0;
        set b = 0;
    ELSE
        set a = a;
        set b = b;
    END IF;
    
    -- 设置变量值
    SET c = a + b;
    
    -- 关闭自动提交,mysql每次执行一条语句都默认自动提交,去掉自动提交可大大提高批量操作性能
    SET autocommit = 0;
    
    -- 循环
    WHILE c <= 10 DO
        -- 执行SQL语句,获取1-4随机数
        SELECT floor( 1 + rand() * 4 );
        
        SET c = c + 1;
    END WHILE;
    
    -- 开启自动提交
    SET autocommit = 1;

    -- 模拟返回值,存储过程不能return
    SELECT c;
END;

  使用

-- 使用存储过程
CALL test_pro ( 1, 2 );

  删除

-- 删除存储过程
DROP PROCEDURE test_pro;

   后记

  MySQL对自定义函数与存储过程的创建、使用、删除的使用暂时先记录到这,后续再进行补充

版权声明

作者:huanzi-qch
若标题中有“转载”字样,则本文版权归原作者所有。若无转载字样,本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.

AD广告位(长期招租,如有需要请私信)

【基塔后台】免费后台管理系统,低代码快速搭建管理后台

【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元!
【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
【腾讯云】星星海SA2云服务器,1核2G首年99元起,高性价比首选!
【腾讯云】中小企业福利专场,多款刚需产品,满足企业通用场景需求,云服务器2.5折起!

【阿里云】新老用户同享,上云优化聚集地!
【阿里云】最新活动页,上新必买抢先知,劲爆优惠不错过!
【阿里云】轻量应用服务器2核2G 低至60元/年起!香港与海外服务器最低24元/月起!
【阿里云】ECS实例升级、续费,享低至 6.3折 限时折扣!

捐献、打赏

请注意:作者五行缺钱,如果喜欢这篇文章,请随意打赏!

支付宝

微信


QQ群交流群

QQ群交流群
有事请加群,有问题进群大家一起交流!

原文地址:https://www.cnblogs.com/huanzi-qch/p/15179491.html