MySQL数据库-----存储过程、存储函数 的创建、调用、查看、修改和删除(详解)

  • 存储程序可以分为存储过程和存储函数。
  • 简单来说,存储过程就是一条或者多条SQL语句的集合,可视为批文件,但是起作用不仅限于批处理。
  • 使用call语句来调用存储过程,只能用输出变量返回值。
  • 函数可以从语句外调用(即通过引用函数名),也能返回标量值。
  • 存储过程可以调用其他存储过程

MySQL中存储过程和存储函数的区别:

  • 在本质上他们都是存储程序。
  • 存储函数只能通过return 语句返回 单个值 或者 表对象
  • 存储过程中不能执行return语句,但是可以通过out参数 返回多个值
  • 存储函数限制较多,不能用临时表,必须用表变量等等。
  • 存储过程的限制相对就比较少
  • 存储函数可以嵌入在SQL语句中使用,可以在色狼了传统语句中作为查询语句中的一部分调用。
  • 存储过程一般是作为一个独立的部分来执行

创建存储过程

create procedure 存储过程的名称 ([指定存储过程的参数列表])
    [指定存储过程的特性]
    SQL代码内容(可用 begin和 end来表示代码的开始于结束)

# 即语法形式如下  
create procedure 存储过程的名称 ([指定存储过程的参数列表])
    [指定存储过程的特性]
    begin
        sql语句
    end;
  • 存储过程的参数列表的形式如下:
    [ in | out | inout ] 参数名称 参数类型
    
    • 其中in表示输入参数,out表示输出参数;
    • inout表示既可以输入也可以输出。
  • 示例
    • 创建一个查看fruits表的存储过程
    # ()代表无参
    create procedure proc()
        begin
            select * from fruits;
        end;
    
    • 代码优化,添加delimiter语句
    mysql>  delimiter //
    mysql>  create procedure proc()
                begin
                    select * from fruits;
                end //
    mysql>  delimiter ;
    
    • 使用delimiter 语法的原因
      • 因为mysql默认结束符是“;”,为了避免与存储过程中的SQL语句相冲突,需要使用delimiter语法改变存储过程的结束符,最后在恢复默认的结束符。
delimiter语法介绍
  • “delimiter //” 语句的作用是将mysql的结束符设置为//
  • “delimiter ; ” 语句将mysql的结束符恢复为默认值 ;
  • 其中delimiter 也可以指定其他符号作为结束符
  • 但是:应该避免使用反斜杠(\),因为反斜杠是mysql中的转义字符。

创建存储函数

create function 存储函数名称 ([存储函数的参数列表])
    returns 返回数据的类型
    [指定存储过程的特性]
    return value(sql语句)
  • 如果在存储函数中的return语句返回一个类型不同于函数的returns子句中指定类型的值,那么返回值将被强制为恰当的类型。比如,如果一个函数返回一个enum或者set值,但是return语句却返回了一个整数,对于set成员集的相应的enum成员,从函数返回的值是字符串。
  • 存储过程的参数列表的指定参数为in、out、inout指对procedure是合法的。(function 中总是默认为 in参数)
  • 示例
    • 创建一个存储函数,名称为Name,该函数返回select语句的查询结果,返回的数值类型为字符串类型:
    create function Name ()
        returns varchar(20)
        return (select name from students where id=5);
    
    • 使用delimiter优化代码
    mysql>  delimiter //
    mysql>  create function Name ()
                returns varchar(20)
                return (select name from students where id=5);
            //
    mysql>  delimiter ;
    

调用存储过程

  • 使用 call语句调用存储过程
call 存储过程名称(存储过程的参数列表)
  • 定义一个名为CountProc1的存储过程,然后调用这个存储过程
    # 定义存储过程
    mysql>  delimiter //
    mysql>  create procedure CountProc1 (in sid int, out num int)
                begin
                    select count(*) into num from students where id=sid;
                end //
    mysql>  delimiter ;
    
    # 调用存储过程
    mysql>  call CountProc1 (101, @num);
    

调用存储函数

  • 使用select调用存储函数
select 存储函数名称 (存储函数参数列表);

查看存储过程和存储函数

1、查看存储过程和函数的状态
  • 查看存储程序的特性,如 数据库、名字、类型、创建者、创建和修改日期等
  • 基本语法格式如下
show {procedure | function} status [like '存储名称'];
2、查看存储过程和函数的定义
  • 查看存储程序的名称、具体的定义语句、还有数据库设置的一些信息。
  • 基本语法格式如下
show create {procedure | function} 存储名称;
3、查看存储过程和函数的信息
  • 在MySQL中,存储过程和函数的信息存储在 information_schema 数据库下的 Routines 表中。
  • 可以通过查询表的记录来查询存储过程或者函数的基本信息。
  • 基本语法格式如下
select * from infromation_schema.Routines
where routine_name='存储名称' [and routine_type='{function | procedure}'];

修改存储过程和函数

  • 使用alter语法可以修改存储过程或函数的特性
  • 基本语法格式如下
alter {function | procedure} 存储名称 [指定存储程序的特性];

删除存储过程和函数

  • 基本语法格式如下
drop {function | procedure} 存储名称;

问题:存储过程和存储函数 中的参数如何使用中文?

答案链接:https://blog.csdn.net/weixin_43622863/article/details/88104137

你可能感兴趣的:(MySQL数据库)