[Mysql] 存储过程简单理解
阅读原文时间:2023年09月07日阅读:2

什么是存储过程

简单的说, 就是一组SQL语句集, 功能强大, 可以实现一些比较复杂的逻辑功能. 其实就和编程语言的面向过程函数一样.

ps: 存储过程与触发器类似, 但存储过程是主动调用, 触发器是触发条件调用.

具有那些特性?

有可以输出输入的参数, 可以声明变量, 有if/else, case, while等流程控制语句. 可以编写复杂的逻辑功能.

特性: 模块化, 封装, 代码复用

速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;

一个简单的存储过程

存储过程名为”Search”, 具有一个返回参数”Count”是INT类型.

-- 删除存储过程
DROP PROCEDURE IF EXISTS `Search`;

-- 创建存储过程
CREATE PROCEDURE `Search`(OUT Count INT)
BEGIN
    /* 从这里开始写你的sql代码 */
    SET Count = 10086;
END;

-- 调用存储过程
CALL Search(@Count);
Select @Count;

-- 查询存储过程
Show procedure status;

参数

[in/out/inout] 参数名 参数类型 ..

IN = 给参数传入值

OUT = 传参, 传入一个变量, 用于接收存储过程内部返回的数据. 相当于Return, 不过应用在了参数

INOUT = 调用者还可以通过 inout 参数传递值给存储过程,也可以从存储过程内部传值给调用者

流程控制语句示例

While循环

    WHILE i <= n DO
        set s = s + i;
        set i = i + 1;
    END WHILE;

Case 选择

    CASE Numbar
    WHEN 0 THEN
        set Content = '零';
    WHEN 1 THEN
        set Content = '壹';
    ELSE
        set Content = '母鸡啊~';
    END CASE;

IF判断; IF / ELSEIF / ELSE

    IF Age = 8 THEN
        set Content = '小学生';
    ELSEIF Age = 15 THEN
        set Content = '初中生';
    ELSE
        set Content = '猜不透啊~';
    END IF;

存储过程利弊

不同数据库,语法差别很大,移植困难,换了数据库,需要重新编写;

不好管理,把过多业务逻辑写在存储过程不好维护,不利于分层管理,容易混乱,一般存储过程适用于个别对性能要求较高的业务,其它的必要性不是很大;