• MYSQL的存储过程


    存储过程

    存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用
    1. 封装,复用, 可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可。
    2. 可以接收参数,也可以返回数据再存储过程中,可以传递参数,也可以接收返回值。
    3. 减少网络交互,效率提升如果涉及到多条SQL,每执行一次都是一次网络传输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。

    基本语法

    创建

    CREATE PROCEDURE 存储过程名称 ([ 参数列表 ])
    BEGIN
    -- SQL 语句
    END ;
    1. -- 创建
    2. DELIMITER $  #将语句的结束符号从分号;临时改为两个$(可以是自定义)
    3. CREATE PROCEDURE p1()
    4. BEGIN
    5. select count(*) from stu;
    6. END $
    7. DELIMITER ; #将语句的结束符号恢复为分号

    调用

    call p1();

    查看

    show create procedure p1;

    删除

    drop procedure if exists p1;

    带参数 

    MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式

    • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
    • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
    • INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

    in类型

    1. DELIMITER $
    2. CREATE PROCEDURE p2(in myid int)
    3. BEGIN
    4. select * from stu where id=myid;
    5. END $
    6. DELIMITER ;

    调用call p2(1);

    char类型的参数

    1. DELIMITER $
    2. CREATE PROCEDURE p2(in myname VARCHAR(255))
    3. BEGIN
    4. set @sql = 'select * from stu where name = ?'; -- 拼接查询总记录的SQL语句
    5. prepare stmt from @sql; -- 预定义一个语句,并将它赋给 stmt
    6. set @a=myname;
    7. execute stmt using @a; -- 执行语句带参数,有其他参数加,分开
    8. deallocate prepare stmt;-- 要释放一个预定义语句的资源
    9. END $
    10. DELIMITER ;

     调用

    out类型

    1. DELIMITER $
    2. CREATE PROCEDURE p3(out result int)
    3. BEGIN
    4. set result=1;
    5. END $
    6. DELIMITER ;

    调用,传入一个无初始化的变量

    结果 

    inout类型

    1. DELIMITER $
    2. CREATE PROCEDURE p4(inout result int)
    3. BEGIN
    4. set result:=result+1;
    5. END $
    6. DELIMITER ;

    调用,传入一个初始化的变量result,查看输出结果result

    存储函数

    存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。具体语法如下

    1. CREATE FUNCTION 存储函数名称 ([ 参数列表 ])
    2. RETURNS type [characteristic ...]
    3. BEGIN
    4. -- SQL语句
    5. RETURN ...;
    6. END ;

     characteristic说明

    • DETERMINISTIC:相同的输入参数总是产生相同的结果
    • NO SQL :不包含 SQL 语句。
    • READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。

    DETERMINISTIC的存储过程

    1. create function fun1(n int)
    2. returns int deterministic
    3. begin
    4. declare total int default 0;
    5. while n>0 do
    6. set total := total + n;
    7. set n := n - 1;
    8. end while;
    9. return total;
    10. end;
    11. select fun1(50);

    READS SQL DATA的存储过程

    1. create function fun2(id int(5))
    2. returns varchar(50) reads sql data
    3. begin
    4. DECLARE result VARCHAR(250);
    5. set result=CONCAT('SELECT * FROM stu WHERE stu.id=', id);
    6. return result;
    7. end;
    8. select fun2(1)

    NO SQL的存储过程 

    1. CREATE FUNCTION fun3()
    2. RETURNS VARCHAR(50) NO SQL
    3. BEGIN
    4. DECLARE result VARCHAR(50);
    5. SET result = 'Function';
    6. RETURN result;
    7. END;
    8. select fun3()

  • 相关阅读:
    java虚拟机详解篇八(运行时数据区概述)
    Win11不能拖拽图片到任务栏软件上快速打开怎么办
    Cassandra 安装部署
    element-ui table分页/筛选后保留勾选项
    【深度学习】实验05 构造神经网络示例
    海康网络摄像机与电脑交互,有网络和无网络两种方式读取URL视频流,以及无网络情况下配置IP地址
    云小课|MRS基础原理之MapReduce介绍
    二叉树 | 代码随想录学习笔记
    深潜Kotlin协程(二十):构建 Flow
    差分数组的应用技巧
  • 原文地址:https://blog.csdn.net/qq_63431773/article/details/132927843